1#line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
13 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
22 #if !defined(ELC_BASE)
25 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
34 #if !defined(ELC_BASE_DEFS)
36 #define __builtin_is_my_dick_still_there() true
41 #include <type_traits>
46 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/_body.hpp"
56 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/default_data_type.hpp"
79 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/_body.hpp"
81 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
89 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
101 #if !defined(ELC_WARNING_LEVEL)
102 #define ELC_WARNING_LEVEL 4
105 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
116 #define BIT_POSSIBILITY 2
120 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
122 #if defined(_MSC_VER)
123 #pragma warning(push,ELC_WARNING_LEVEL)
124 #pragma warning(disable:4099)
125 #pragma warning(disable:26812)
126 #pragma warning(disable:4584)
127 #pragma warning(disable:4250)
128 #pragma warning(disable:26432)
129 #pragma warning(disable:26435)
130 #pragma warning(disable:26481)
131 #pragma warning(disable:26446)
132 #pragma warning(disable:26434)
133 #pragma warning(disable:26429)
134 #pragma warning(disable:26471)
135 #pragma warning(disable:26474)
136 #pragma warning(disable:26473)
137 #pragma warning(disable:26456)
138 #pragma warning(disable:26485)
139 #pragma warning(disable:26490)
140 #pragma warning(disable:26472)
141 #pragma warning(disable:26482)
142 #pragma warning(disable:26493)
144 #if defined(_MSC_VER)
145 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
146 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
147 #define push_msvc_warning() __pragma(warning(push))
148 #define pop_msvc_warning() __pragma(warning(pop))
149 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
151 #define suppress_msvc_warning(...)
152 #define disable_msvc_warning(...)
153 #define push_msvc_warning()
154 #define pop_msvc_warning()
155 #define push_and_disable_msvc_warning(...)
158 #if defined(ELC_VOID_NAME)
163 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
164 #define noexcept_as_auto MAGIC
165 #define constexpr_as(...) MAGIC constexpr
166 #define constexpr_as_auto MAGIC MAGIC constexpr
168 #define using_method_from_base_t(name,...) \
169 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
170 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
172 return base_t::name(forward<Args>(rest)...);\
175 #define using_method_from_value(name,value_name,...) \
176 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
177 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
179 return value_name.name(forward<Args>(rest)...);\
182 #define floop while(__builtin_is_my_dick_still_there())
183 #define enable_adl(name) void name()noexcept=delete
185 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
186 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
188 #define declvalue(...) (::std::declval<__VA_ARGS__>())
191 #define template_error(reason) static_assert(template_error_helper<T>,reason)
193 #define template_warning(reason) template_warning_helper<T>(reason)
196 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
197 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
199 #define is_common_attribute(name) public attribute<T,name<T>>
200 #define is_special_attribute(name) public attribute<T,name>
202 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
203 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
206 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
208 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
211 #define def_common_attribute_with_nothing(name) \
212 template<typename T>\
215 #define def_special_attribute_with_nothing(name) \
218 #define common_attribute_t template<class>class
219 #define special_attribute_t class
229 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
231 #define enabled_by_default class enable_state=void
233 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
235 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
237 #define enable_flag class enable_state
239 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
240 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
241 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
242 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
243 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
246 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
248 #define get_recursive_lambda_caller(name) \
249 lambda_with_catch(&)(auto&&...Args){\
250 return name(name,Args...);\
255 #define lambda_with_catch(...) [__VA_ARGS__]
257 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
259 #define lambda_RLSRRS _my_jb_super_sb_name_
267 #define elseif else if
271 #define _small_than_ <
273 #if defined(_MSC_VER)
280 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
282 #define BREAK_NAMESPACE }
285 #define template_name template
287 #define type_name class
289 #if defined(DEBUG) || defined(_DEBUG)
290 #define not_in_debug 0
292 #define not_in_debug 1
296 #define ec(ch) U ## ch
298 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
299 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
301 #define ELC_TEST_EVENTNAME(name)
304 #define override_instance_struct \
306 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
307 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
308 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
309 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
310 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
313 #define distinctive __declspec(dllexport)
319 #define force_inline __forceinline
320 #elif defined(__GNUC__)
321 #define force_inline __attribute__((always_inline)) inline
323 #define force_inline inline
327 #define with_no_vtable __declspec(novtable)
329 #define with_no_vtable
332 #define in_consteval (::std::is_constant_evaluated())
334 #define no_vtable_struct struct with_no_vtable
335 #define no_vtable_class class with_no_vtable
339 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
343 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/_body.hpp"
346 using namespace base;
349 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
351 inline void check_memory_lack()noexcept;
353 ~memory_lack_checker_t(){
356 }memory_lack_checker{};
361 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
371 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/template_helper.hpp"
388 template<
class T,
class U>
389 [[deprecated(
"this was a template warning."),nodiscard]]
394 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
395 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/using_std.hpp"
409 using ::std::forward;
410 using ::std::addressof;
431 template<
bool B,
class T,
class F>
434 using ::std::partial_ordering;
435 using ::std::weak_ordering;
436 using ::std::strong_ordering;
440 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
441 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/concept.hpp"
455 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
456 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/magic_number.hpp"
465 namespace magic_number{
471 constexpr auto gold=0.61803398874989484820458683436563811772030917980576286213544862270526046281890244970720720418939113748475408807538689175212663386222353693179318006076672635443338908659593958290563832266131992829026788067520876689250171169620703222104321626954862629631361443814975870122034080588795445474924618569536486444924104432077134494704956584678850987433944221254487706647809158846074998871240076521705751797883416625624940758906970400028121042762177111777805315317141011704666599146697987317613560067087480710131795236894275219484353056783002287856997829778347845878228911097625003026961561700250464338243776486102838312683303724292675263116533924731671112115881863851331620384005222165791286675294654906811317159934323597349498509040947621322298101726107059611645629909816290555208524790352406020172799747175342777592778625619432082750513121815628551222480939471234145170223735805772786160086883829523045926478780178899219902707769038953219681986151437803149974110692608867429622675756052317277752035361393621076738937645560606059216589466759551900400555908950229530942312482355212212415444006470340565734797663972394949946584578873039623090375033993856210242369025138680414577995698122445747178034173126453220416397232134044449487302315417676893752103068737880344170093954409627955898678723209512426893557309704509595684401755519881921802064052905518934947592600734852282101088194644544222318891319294689622002301443770269923007803085261180754519288770502109684249362713592518760777884665836150238913493333122310533923213624319263728910670503399282265263556209029798642472759772565508615487543574826471814145127000602389016207773224499435308899909501680328112194320481964387675863314798571911397815397807476150772211750826945863932045652098969855567814106968372884058746103378105444390943683583581381131168993855576975484149144534150912954070050194775486163075422641729394680367319805861833918328599130396072014455950449779212076124785645916160837059498786006970189409886400764436170933417270919143365013715;
479 constexpr auto pi = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356082778577134275778960917363717872146844090122495343014654958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235378759375195778185778053217122680661300192787661119590921642019893809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009;
482 constexpr auto e = 2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852516642742746639193200305992181741359662904357290033429526059563073813232862794349076323382988075319525101901157383418793070215408914993488416750924476146066808226480016847741185374234544243710753907774499206955170276183860626133138458300075204493382656029760673711320070932870912744374704723069697720931014169283681902551510865746377211125238978442505695369677078544996996794686445490598793163688923009879312773617821542499922957635148220826989519366803318252886939849646510582093923982948879332036250944311730123819706841614039701983767932068328237646480429531180232878250981945581530175671736133206981125099618188159304169035159888851934580727386673858942287922849989208680582574927961048419844436346324496848756023362482704197862320900216099023530436994184914631409343173814364054625315209618369088870701676839642437814059271456354906130310720851038375051011574770417189861068739696552126715468895703503540212340784981933432106817012100562788023519303322474501585390473041995777709350366041699732972508868769664035557071622684471625607988265178713419512466520198918006308407507245458379639351364421067750539471789004518357551541252235905906872648786357525419112888773717663748602766063496035367947026923229718683277173932361920077745221262475186983349515101986426988784717193966497690708252174233656627259284406204302141137199227852699846988477023238238400556555178890876613601304770984386116870523105531491625172837327286760072481729876375698163354150746088386636406934704372066886512756882661497307886570156850169186474885416791545965072342877306998537139043002665307839877638503238182155355973235306860430106757608389086270498418885951380910304235957824951439885901131858358406674723702971497850841458530857813391562707603563907639473114554958322669457024941398316343323789759556808568362972538679132750555425244919435891284050452269538121791319145135009938463117740179715122837854601160359554028644059;
487 template<
typename T> requires ::std::is_arithmetic_v<T>
489 if constexpr(::std::is_signed_v<T>){
490 if constexpr(::std::is_floating_point_v<T>)
491 return ::std::signbit(x);
499 template<
typename T> requires ::std::is_arithmetic_v<T>
501 if constexpr(::std::is_signed_v<
decltype(x)>){
502 if constexpr(::std::is_floating_point_v<
decltype(x)>)
503 return(T)::std::copysign(x,negative?-1:1);
505 return(T)negative?T{}-x:x;
511 return copy_as_negative<decltype(x)>(x,negative);
514 template<
typename T> requires ::std::is_arithmetic_v<T>
516 if constexpr(::std::is_floating_point_v<T>)
517 return (
size_t)(ptrdiff_t)x;
522 template<
typename T> requires ::std::is_arithmetic_v<T>
524 if constexpr(::std::is_floating_point_v<T>)
525 return (::std::uintmax_t)(::std::intmax_t)x;
527 return (::std::uintmax_t)x;
530 template<
typename T1,
typename T2> requires ::std::is_arithmetic_v<T1> and ::std::is_arithmetic_v<T2>
532 if constexpr(::std::is_floating_point_v<T1>||::std::is_floating_point_v<T2>)
533 return ::std::fmod(a,b);
540 if constexpr(::std::is_floating_point_v<T>)
541 ::std::fesetround(mode);
546 if constexpr(::std::is_floating_point_v<T>)
547 return ::std::fegetround();
557 set_rounding<T>(new_rounding);
565 template<
class T> requires ::std::is_unsigned_v<T>
566 [[nodiscard]]
force_inline constexpr auto rotl_nomod(
const T v,
const auto R)
noexcept;
569 template<
class T> requires ::std::is_unsigned_v<T>
571 constexpr auto d = ::std::numeric_limits<T>::digits;
572 if constexpr(::std::is_unsigned_v<
decltype(r)>){
574 return static_cast<T
>(
static_cast<T
>(v >> r) |
static_cast<T
>(v << (d - r)));
580 return static_cast<T
>(
static_cast<T
>(v >> r) |
static_cast<T
>(v << (d - r)));
589 template<
class T> requires ::std::is_unsigned_v<T>
591 constexpr auto d = ::std::numeric_limits<T>::digits;
592 if constexpr(::std::is_unsigned_v<
decltype(r)>){
594 return static_cast<T
>(
static_cast<T
>(v << r) | static_cast<T>(v >> (d - r)));
600 return static_cast<T
>(
static_cast<T
>(v << r) | static_cast<T>(v >> (d - r)));
609 template<
class T> requires ::std::is_unsigned_v<T>
611 constexpr auto d = ::std::numeric_limits<T>::digits;
612 const auto r =
mod(R,d);
617 template<
class T> requires ::std::is_unsigned_v<T>
619 constexpr auto d = ::std::numeric_limits<T>::digits;
620 const auto r =
mod(R,d);
623 template<
class T> requires ::std::is_arithmetic_v<T>
625 static constexpr auto rot_offset_npos = ::std::numeric_limits<T>::digits;
631 if(_offset==rot_offset_npos)
637 _offset=rot_offset_npos;
657 template<
class T> requires ::std::is_unsigned_v<T>
663 template<
class T> requires ::std::is_unsigned_v<T>
669 template<
class T> requires ::std::is_unsigned_v<T>
675 template<
class T> requires ::std::is_unsigned_v<T>
680 template<
class T> requires ::std::is_arithmetic_v<T>
682 if constexpr(::std::is_signed_v<T>)
688 template<
class T> requires ::std::is_arithmetic_v<T>
690 return abs(a-b)<=::std::numeric_limits<T>::epsilon();
695 if constexpr(::std::is_arithmetic_v<T1>&&::std::is_arithmetic_v<T2>){
696 if constexpr(::std::is_floating_point_v<T1>||::std::is_floating_point_v<T2>)
699 using signedT = ::std::make_signed_t<::std::common_type_t<T1,T2>>;
700 return static_cast<signedT
>(a)-
static_cast<signedT
>(b);
708 template<
class T> requires ::std::is_floating_point_v<T>
711 typedef decltype(::std::exp(v)) RT;
712 auto exp_impl =
recursive_lambda(RT x,RT sum,RT n,
size_t i,RT t)
noexcept -> RT{
713 const auto epsilon=sum+t/n;
720 return exp_impl_caller(RT{v},RT{1},RT{1},2,RT{v});
723 return ::std::exp(v);
727 template<
class T> requires ::std::is_arithmetic_v<T>
730 typedef decltype(::std::log(a)) RT;
732 auto log_iter =
lambda(RT x,RT y)
noexcept{
733 const auto exp_y =
exp(y);
734 return y + T{2}*(x-exp_y)/(x+exp_y);
739 return log_impl_caller((RT)a,RT{0});
742 return ::std::log(a);
744 template<
class T,
class U> requires ::std::is_arithmetic_v<T> && ::std::is_arithmetic_v<U>
750 template<
class T,
class U>
requires (::std::is_arithmetic_v<T> && ::std::is_arithmetic_v<U>)
753 typedef decltype(::std::pow(a,b)) RT;
754 return exp(RT(b)*
log(RT(a)));
757 return ::std::pow(a,b);
761 template<
class T> requires ::std::is_floating_point_v<T>
764 typedef decltype(::std::trunc(v)) RT;
765 return static_cast<RT
>((::std::intmax_t)v);
768 return ::std::trunc(v);
772 template<
class T> requires ::std::is_floating_point_v<T>
775 typedef decltype(::std::ceil(v)) RT;
776 auto ceil_impl =
lambda(T x, T y)
noexcept{
777 return feq(x,y) ? y : y+T{1};
782 return ::std::ceil(v);
786 template<
class T> requires ::std::is_arithmetic_v<T>
789 if constexpr(::std::is_floating_point_v<T>)
811 T b=
static_cast<T
>(::std::sqrt(a));
824 if((!
mod(a,c))||(!
mod(a,(c+2))))
838 template<
class T> requires ::std::is_arithmetic_v<T>
840 if constexpr(::std::is_floating_point_v<T>)
865 namespace linear_interpolation{
866 [[nodiscard]]
inline constexpr auto get_k(
auto y1,
auto y2,
auto δx)
noexcept{
871 [[nodiscard]]
inline constexpr auto get_k(
auto y1,
auto y2)
noexcept{
872 return get_k(y1,y2,1.0);
874 [[nodiscard]]
inline constexpr auto get_result(
auto y1,
auto k,
auto δx)
noexcept{
907 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
909 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/other.hpp"
920 template<
typename T,
typename U>
940 template_error(
"Please overload the function the_destroy in the namespace where this type is defined.");
945 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
947 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/cast.hpp"
963 inline constexpr const T
add_const(T a)
noexcept{
return a;}
966 inline constexpr const T&
add_const(T&a)
noexcept{
return a;}
969 inline constexpr T&
remove_const(
const T&a)
noexcept{
return const_cast<T&
>(a);}
972 inline constexpr const T*
add_const(T*a)
noexcept{
return a;}
975 inline constexpr T*
remove_const(
const T*a)
noexcept{return ::std::launder(
const_cast<T*
>(a));}
977 template<
typename T,
typename U>
978 inline constexpr T
down_cast(U a)
noexcept{
return static_cast<T
>(a);}
983 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
984 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/special_flags.hpp"
994 #define defspecflag(name)\
995 constexpr struct name##_t{} name{}
1004 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1005 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/non_Xable.hpp"
1051 #line 19 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1052 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/attribute.hpp"
1061 template<
class T,
typename attribute_name>
1064 template<
class U,special_attribute_t another_attribute_name>
1066 constexpr T*
get_handle()noexcept{
return down_cast<T*>(down_cast<attribute_name*>(
this));}
1068 template<
class U,special_attribute_t another_attribute_name>
1070 constexpr const T*
get_handle()const noexcept{
return down_cast<const T*>(down_cast<const attribute_name*>(
this));}
1072 template<
class T,special_attribute_t attribute_name>
1074 template<
class T,special_attribute_t attribute_name>
1077 template<
class T,common_attribute_t attribute_name>
1079 template<
class T,common_attribute_t attribute_name>
1080 const T*
get_handle(
const attribute<T,attribute_name<T>>*a)
noexcept{
return get_handle<T,attribute_name<T>>(a);}
1082 template<special_attribute_t attribute_name,
class T>
1084 return static_cast<attribute_name*
>(ptr);
1086 template<special_attribute_t attribute_name,
class T>
1088 return static_cast<const attribute_name*
>(ptr);
1090 template<common_attribute_t attribute_name,
class T>
1092 return attribute_ptr_cast<attribute_name<remove_cvref<T>>>(ptr);
1095 template<special_attribute_t attribute_name,
class T>
1097 return*attribute_ptr_cast<attribute_name>(&t);
1099 template<common_attribute_t attribute_name,
class T>
1101 return*attribute_ptr_cast<attribute_name>(&t);
1118 #line 20 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1119 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/special_attribute.hpp"
1133 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1134 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/type_info.hpp"
1147 const ::std::type_info*
_m;
1149 constexpr type_id_t(const ::std::type_info&a)
noexcept:
_m(&a){}
1150 constexpr type_id_t(
const type_id_t&a)
noexcept=
default;
1151 [[nodiscard]]
type_name_t get_name()
const noexcept;
1152 [[nodiscard]]
size_t get_hash()
const noexcept{
1153 return _m->hash_code();
1155 [[nodiscard]]
bool operator==(
const type_id_t&a)
const noexcept{
return *
_m==*a._m;}
1162 [[nodiscard]]
type_name_t get_name()const noexcept;
1163 [[nodiscard]]
size_t get_hash()const noexcept{
1164 return _tid.get_hash();
1167 [[nodiscard]]
bool operator==(const ::std::type_info&a)
const noexcept{
return _tid==type_id_t(a);}
1174 static constexpr bool same_as=::std::is_same_v<T,U>;
1176 static constexpr bool not_same_as=!same_as<U>;
1180 static constexpr bool not_base_on=!base_on<U>;
1183 static constexpr bool can_convert_to=::std::is_convertible_v<T,U>;
1185 static constexpr bool can_t_convert_to=!can_convert_to<U>;
1187 static constexpr bool can_nothrow_convert_to=::std::is_nothrow_convertible_v<T,U>;
1189 static constexpr bool can_t_nothrow_convert_to=!can_nothrow_convert_to<U>;
1198 template<special_attribute_t attribute_name>
1200 return base_on<attribute_name>;
1202 template<common_attribute_t attribute_name>
1204 return has_attribute_helper<attribute_name<remove_cvref<T>>>();
1206 template<special_attribute_t attribute_name>
1208 return!has_attribute_helper<attribute_name>();
1210 template<common_attribute_t attribute_name>
1212 return!has_attribute_helper<attribute_name>();
1240 [[nodiscard]]
type_name_t get_name()const noexcept;
1241 [[nodiscard]]
size_t get_hash()const noexcept{
1251 template<
class T,
class U>
1271 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1272 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/min_max.hpp"
1292 template<
class...Args>
1295 template<
typename T>
1298 template<
class...Args>
requires able<Args...>
1300 return ::std::min(forward<Args>(rest)...);
1302 template<
class T>
requires able<::std::initializer_list<T>>
1303 [[nodiscard]]
constexpr auto operator()(::std::initializer_list<T>l)
const{
1304 return ::std::min(l);
1306 template<
typename T>
requires get_limit_able<T>
1308 return ::std::numeric_limits<T>::min();
1320 template<
class...Args>
1323 template<
typename T>
1326 template<
class...Args>
requires able<Args...>
1328 return ::std::max(forward<Args>(rest)...);
1330 template<
class T>
requires able<::std::initializer_list<T>>
1331 [[nodiscard]]
constexpr auto operator()(::std::initializer_list<T>l)
const{
1332 return ::std::max(l);
1334 template<
typename T>
requires get_limit_able<T>
1336 return ::std::numeric_limits<T>::max();
1342 #line 23 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1343 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/null_ptr.hpp"
1352 namespace null_ptr_n{
1366 template<
typename T>
1369 constexpr auto null_as_T =
static_cast<T*
>(
nullptr);
1373 template_error(
"please overload the function the_get_null_ptr in the namespace where this type is defined.");
1385 template<
typename T>
1387 template<
typename T>
1388 [[nodiscard]]
constexpr_as(base_get<T>())operator T*()const noexcept{
return down_cast<T*>(base_get<T>());}
1392 template<
typename T,
typename U=
decltype(*null_ptr.
base_get<T>())>
1405 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1406 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/compare.hpp"
1444 template<
class T,
class U=T>
1446 template<
class T,
class U=T>
1449 template<
typename T,
typename U>
1450 [[nodiscard]]
constexpr auto operator()(T&&a,U&&b)
const noexcept(nothrow<T,U>){
1453 template<
typename T,
typename U>
1454 [[nodiscard]]
constexpr bool operator()(T*a,U*b,
size_t size)
const noexcept(nothrow<T,U>){
1461 template<
typename T,
typename U,
size_t N1,
size_t N2>
1462 [[nodiscard]]
constexpr bool operator()(T(&a)[N1],U(&b)[N2])
const noexcept(nothrow<T,U>){
1463 if constexpr(N1==N2)
1464 return operator()(a,b,N1);
1470 template<
typename T,
typename U>
1471 [[nodiscard]]
constexpr bool operator()(T*a,
size_t size1,U*b,
size_t size2)
const noexcept(nothrow<T,U>){
1473 return operator()(a,b,size1);
1477 template<
typename T,
typename U>
1480 if(*a!=*b || *b==U{0})
1487 template<
typename T,
typename U>
1491 template<
typename T,
typename U>
1502 template<
typename T,
typename U>
1505 if(*a!=*b || *b==U{0})
1515 template<
typename T>
1519 template<
typename T>
1553 template<
class T,
class U=T>
1556 template<
class T,
class U=T>
1557 static constexpr bool able= r_able<T,U> ||
1563 template<
class T,
class U=T>
1572 template<
class T,
class U>
1573 [[nodiscard]]
static constexpr auto base_call(T&&a,U&&b)
noexcept(nothrow<T,U>){
1575 if constexpr(r_able<T,U>)
1577 else return a == b ? partial_ordering::equivalent :
1578 a < b ? partial_ordering::less :
1579 b < a ? partial_ordering::greater :
1580 partial_ordering::unordered ;
1583 template<
class T,
class U=T>
1586 template<
typename T,
typename U>
1587 [[nodiscard]]
constexpr auto operator()(T&&a,U&&b)
const noexcept(nothrow<T,U>){
1588 return base_call(a,b);
1590 template<
typename T,
typename U>
1591 [[nodiscard]]
constexpr auto operator()(T*a,U*b,
size_t size)
const noexcept(nothrow<T,U>){
1593 if(
auto tmp=base_call(*(a++),*(b++)); tmp!=0)
1596 return strong_ordering::equivalent;
1598 template<
typename T,
typename U,
size_t N1,
size_t N2>
1599 [[nodiscard]]
constexpr auto operator()(T(&a)[N1],U(&b)[N2])
const noexcept(nothrow<T,U>){
1600 if constexpr(N1==N2)
1601 return operator()(a,b,N1);
1607 template<
typename T,
typename U>
1608 [[nodiscard]]
constexpr auto operator()(T*a,
size_t size1,U*b,
size_t size2)
const noexcept(nothrow<T,U>){
1613 return operator()(a,b,size1);
1615 template<
typename T,
typename U>
1617 type<T,U> tmp=strong_ordering::equivalent;
1620 return strong_ordering::greater;
1622 tmp=base_call(*a,*b);
1626 return *b==U{0}?tmp:strong_ordering::less;
1628 template<
typename T,
typename U>
1630 type<T,U> tmp=strong_ordering::equivalent;
1633 return strong_ordering::less;
1635 tmp=base_call(*a,*b);
1639 return *b==U{0}?tmp:strong_ordering::less;
1641 template<
typename T,
typename U>
1643 type<T,U> tmp=strong_ordering::equivalent;
1646 return *b==U{0}?tmp:strong_ordering::less;
1648 tmp=base_call(*a,*b);
1653 template<
typename T,
typename U>
1655 type<T,U> tmp=strong_ordering::equivalent;
1658 return strong_ordering::greater;
1660 tmp=base_call(*a,*b);
1666 template<
typename T,
typename U>
1667 [[nodiscard]]
constexpr auto lexicographical(T*a,
size_t size1,U*b,
size_t size2)
const noexcept(nothrow<T,U>){
1668 if(
auto tmp=
operator()(a,b,
min(size1,size2)); tmp!=0)
1671 return size1<=>size2;
1673 template<
typename T,
typename U,
size_t N1,
size_t N2>
1674 [[nodiscard]]
constexpr auto lexicographical(T(&a)[N1],U(&b)[N2])
const noexcept(nothrow<T,U>){
1675 return lexicographical(a,N1,b,N2);
1677 template<
typename T,
typename U>
1681 return strong_ordering::greater;
1682 if(
auto tmp=base_call(*a,*b); tmp!=0)
1687 return *b==U{0}?strong_ordering::equivalent:
1688 strong_ordering::less;
1690 template<
typename T,
typename U>
1694 return strong_ordering::less;
1695 if(
auto tmp=base_call(*a,*b); tmp!=0)
1700 return *b==U{0}?strong_ordering::equivalent:
1701 strong_ordering::less;
1703 template<
typename T,
typename U>
1707 return *b==U{0}?strong_ordering::equivalent:
1708 strong_ordering::less;
1709 if(
auto tmp=base_call(*a,*b); tmp!=0)
1715 template<
typename T,
typename U>
1719 return strong_ordering::greater;
1720 if(
auto tmp=base_call(*a,*b); tmp!=0)
1725 return strong_ordering::equivalent;
1728 [[nodiscard]]
constexpr auto reverse(partial_ordering odr)
const noexcept{
1729 if(odr==partial_ordering::greater)
1730 return partial_ordering::less;
1731 elseif(odr==partial_ordering::less)
1732 return partial_ordering::greater;
1736 [[nodiscard]]
constexpr auto reverse(weak_ordering odr)
const noexcept{
1737 if(odr==weak_ordering::greater)
1738 return weak_ordering::less;
1739 elseif(odr==weak_ordering::less)
1740 return weak_ordering::greater;
1744 [[nodiscard]]
constexpr auto reverse(strong_ordering odr)
const noexcept{
1745 if(odr==strong_ordering::greater)
1746 return strong_ordering::less;
1747 elseif(odr==strong_ordering::less)
1748 return strong_ordering::greater;
1756 #line 25 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1757 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/note.hpp"
1767 #define def_note(name)\
1768 template<typename T>\
1771 force_inline constexpr name##_t(T a):value(a){}\
1773 force_inline constexpr name##_t(name##_t<U>a):value(a.value){}\
1774 force_inline constexpr operator T(){return value;}\
1775 force_inline constexpr T operator()(){return value;}\
1777 template<typename T>\
1778 constexpr name##_t<T>name(T v){return{v};}
1787 namespace note=note_n;
1791 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1792 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/array_like.hpp"
1801 namespace array_like_n{
1804 template<
class T,
size_t N>
1811 template<
class T,
size_t N>
1832 template<
class T,
class U>
1835 begin_of_array_like<T>(v);
1836 size_of_array_like<T>(v);
1850 template<
class U>
requires is_array_like_for<T,U>
1855 swap(_begin,b._begin);
1856 swap(_size,b._size);
1860 [[nodiscard]]
constexpr size_t size()const noexcept{
return _size;}
1870 [[nodiscard]]
constexpr bool empty()const noexcept{
return size();}
1872 [[nodiscard]]
constexpr T&
operator[](
size_t pos)
noexcept{
return begin()[pos];}
1876 return compare(_begin,_size,a._begin,a._size);
1879 return equal(_begin,_size,a._begin,a._size);
1882 template<
typename T>
1885 using base_t::base_t;
1888 if(*ptr)
return get_length_of(ptr+1)+1;
1916 #line 27 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1917 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/data.hpp"
1929 template<
class T> requires ::std::is_integral_v<T>
1942 [[nodiscard]]
constexpr T&
data_cast(
byte*p){
return*::std::launder(
reinterpret_cast<T*
>(p));}
1948 [[nodiscard]]
constexpr byte*
cast_to_data(T*p){return ::std::launder(
reinterpret_cast<byte*
>(p));}
1954 [[nodiscard]]
constexpr const byte*
cast_to_data(
const T*p){return ::std::launder(
reinterpret_cast<const byte*
>(p));}
1961 template<
class...Ts>
1964 alignas(
max({
alignof(Ts)...}))
1965 byte _data[
max({
sizeof(Ts)...})];
1966 constexpr operator byte*(){
return _data;}
1996 #line 28 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1997 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/pointer.hpp"
2010 template<
typename T>
2021 template<
typename T>
2054 #line 29 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
2055 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/hash.hpp"
2072 return _value==a._value;
2096 if constexpr(is_pointer<T>)
2098 elseif constexpr(is_fundamental_hash<T>)
2100 elseif constexpr(is_unstable_hash<T>)
2103 return noexcept(
declvalue(
const T&).hash());
2106 elseif constexpr(type_info<remove_cv<T>> == type_info<base_type_info_t>)
2112 static constexpr bool nothrow=nothrow_helper<T>();
2115 if constexpr(is_pointer<T>)
2117 elseif constexpr(is_fundamental_hash<T>)
2119 elseif constexpr(is_unstable_hash<T>)
2125 elseif constexpr(type_info<remove_cv<T>> == type_info<base_type_info_t>)
2131 static constexpr bool able=able_helper<T>();
2133 #define hash operator()
2139 return{a.get_hash()};
2141 template<
class T>
requires able<T>
2144 if constexpr(is_pointer<T>)
2146 elseif constexpr(is_fundamental_hash<T>)
2148 elseif constexpr(is_unstable_hash<T>)
2155 template_error(
"Please overload the function hash in the namespace where this type is defined.");
2158 #define hash operator()
2162 return hash(a)._value;
2169 rot_iterator<
decltype(aret)>rotl_offset = before_size+size;
2171 aret ^= rotl(get_hash_in_base_type(a[size]),rotl_offset);
2188 size=size%bitnumof_void;
2189 if(value._value==0 || size==0)
2191 if(size >= bit_range_max){
2193 aret = is_npos?npos_hash:void_hash;
2194 size-=bit_range_max;
2201 aret ^= rotl(value._value,rotl_offset);
2209 return repeat_times(
hash(value),size);
2212 [[nodiscard]]
constexpr inline hash_value_t hash(
const T*a,
size_t size)
const noexcept(nothrow<const T>){
2213 return with_calculated_before(
hash(
nothing),0,a,size);
2219 return{before.
_value^(rotl(after._value,before_size))};
2221 template<
class T>
requires is_not_signal_value_for_array_like<T>
2223 return hash(a.begin(),a.size());
2225 template<
class T>
requires is_not_signal_value_for_array_like<T>
2227 return with_calculated_before(before,before_size,a.begin(),a.size());
2242 #line 30 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
2243 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/range.hpp"
2255 template<
typename T>
2259 constexpr range_t(
const T begin,
const T end):_begin(begin),_end(
end){}
2265 constexpr size_t size()noexcept{
return _end-_begin;}
2266 constexpr auto end()noexcept{
return _end;}
2267 constexpr auto begin()noexcept{
return _begin;}
2268 constexpr auto end()const noexcept{
return _end;}
2269 constexpr auto begin()const noexcept{
return _begin;}
2271 template <
class U>
requires(type_info<T>.can_convert_to<U>)
2272 constexpr operator range_t<U>()
const noexcept(type_info<T>.can_nothrow_convert_to<U>){
2273 return {_begin,_end};
2278 [[nodiscard]]
inline auto size_of_array_like(
range_t<T*>&a)
noexcept{
return a.size();}
2283 [[nodiscard]]
inline auto begin_of_array_like(
range_t<T*>&a)
noexcept{
return a.begin();}
2289 template<
typename T>
2291 return bool(pattern>=range.begin() && pattern<range.end());
2295 template<
typename T>
2302 template<
typename T>
2307 size_t skip_table[number_of_possible_values_per<index_type>]{};
2308 size_t radical_skip_table[number_of_possible_values_per<index_type>]{};
2309 index_type pre_index_table[number_of_possible_values_per<index_type>]{};
2312 return index_type(
hash(ch) % number_of_possible_values_per<index_type>);
2315 const size_t m=pattern.size();
2318 for(
size_t i=0;i<number_of_possible_values_per<index_type>;i++){
2319 skip_table[i]=radical_skip_table[i]=m;
2321 skip_table[get_index_of(pattern[0])]=radical_skip_table[get_index_of(pattern[0])]=m-1;
2322 for(
size_t i=1;i<m-1;i++){
2324 radical_skip_table[index]=skip_table[index];
2325 skip_table[index]=m-i-1;
2326 pre_index_table[index]=get_index_of(pattern[i-1]);
2330 build_table(_pattern);
2333 size_t m = _pattern.
size();
2335 return range.begin();
2336 size_t n= range.size();
2341 while((j>=0)&&(_pattern[j]==range[i])){
2345 return addressof(range[i+1]);
2347 if(get_index_of(range[k-1])!=pre_index_table[index_k])
2348 i=k+radical_skip_table[index_k];
2350 i=k+skip_table[index_k];
2358 template<
typename T>
2363 size_t skip_table[number_of_possible_values_per<index_type>]{};
2364 size_t radical_skip_table[number_of_possible_values_per<index_type>]{};
2365 index_type pre_index_table[number_of_possible_values_per<index_type>]{};
2368 return index_type(
hash(ch) % number_of_possible_values_per<index_type>);
2371 const size_t m=pattern.size();
2374 for(
size_t i=0;i<number_of_possible_values_per<index_type>;i++){
2375 skip_table[i]=radical_skip_table[i]=m;
2377 skip_table[get_index_of(pattern[m-1])]=radical_skip_table[get_index_of(pattern[m-1])]=m-1;
2378 for(ptrdiff_t i=m-2;i>=0;i--){
2380 radical_skip_table[index]=skip_table[index];
2381 skip_table[index]=i;
2382 pre_index_table[index]=get_index_of(pattern[i+1]);
2386 build_table(_pattern);
2389 size_t m=_pattern.
size();
2391 return range.begin();
2392 size_t n= range.size();
2397 while((j<=m-1)&&(_pattern[j]==range[i])){
2401 return addressof(range[k]);
2403 if(get_index_of(range[k+1])!=pre_index_table[index_k])
2404 i=k-radical_skip_table[index_k];
2406 i=k-skip_table[index_k];
2414 static constexpr
size_t npos =
size_t(-1);
2416 template<typename T>
2418 for(
auto&i : range){
2420 return addressof(i);
2425 template<
typename T>
2427 auto result =
in_range(pattern,range);
2429 return result - range.
begin();
2435 template<
typename T>
2437 if(range.
size() >= 512 && pattern.
size() >= 11){
2439 return tmp.
match(range);
2443 size_t matching_off_set=1;
2447 while(pattern.
end()[0-matching_off_set]==range.
begin()[off_set+pattern.
size()-matching_off_set])
2448 if(matching_off_set==pattern.
size())
2449 return addressof(range.
begin()[off_set]);
2452 if(off_set+pattern.
size() >= range.
size())
2456 tmp=pattern.
begin();
2457 off_set+=pattern.
end()-tmp;
2461 template<
typename T>
2463 auto result =
in_range(pattern,range);
2465 return result - range.
begin();
2470 template<
typename T>
2472 for(
auto&i : range|::std::views::reverse){
2474 return addressof(i);
2479 template<
typename T>
2483 return result - range.
begin();
2489 template<
typename T>
2491 if(range.
size() >= 512 && pattern.
size() >= 11){
2493 return tmp.
match(range);
2497 size_t matching_off_set=0;
2501 while(pattern.
begin()[matching_off_set]==range.
end()[0-(off_set+pattern.
size()-matching_off_set)])
2502 if(matching_off_set==pattern.
size()-1)
2503 return addressof(range.
end()[0-(off_set+pattern.
size())]);
2506 if(off_set+pattern.
size() >= range.
size())
2510 tmp=pattern.
end()-1;
2511 off_set+=tmp-pattern.
begin();
2516 template<
typename T>
2520 return result - range.
begin();
2528 template<
typename T>
2531 bool _bitmark[number_of_possible_values_per<index_type>]{};
2535 if constexpr(number_of_possible_values_per<T> > number_of_possible_values_per<index_type>){
2536 for(
auto& i: pattern){
2537 if(::std::make_unsigned_t<T>(i) >= number_of_possible_values_per<index_type>)
2543 for(
auto& i: pattern)
2549 if constexpr(number_of_possible_values_per<T> > number_of_possible_values_per<index_type>)
2550 if(::std::make_unsigned_t<T>(index) >= number_of_possible_values_per<index_type>)
2557 template<
typename T>
2559 for(
auto&i : range){
2561 return addressof(i);
2567 template<
typename T>
2569 for(
auto&i : range){
2571 return addressof(i);
2577 template<
typename T>
2579 if constexpr(::std::is_integral_v<T>){
2581 if(mark.
mark(pattern))
2587 template<
typename T>
2591 return result - range.
begin();
2597 template<
typename T>
2599 for(
auto& i: range|::std::views::reverse){
2601 return addressof(i);
2606 template<
typename T>
2608 for(
auto&i : range|::std::views::reverse){
2610 return addressof(i);
2616 template<
typename T>
2618 if constexpr(::std::is_integral_v<T>){
2620 if(mark.
mark(pattern))
2626 template<
typename T>
2630 return result - range.
begin();
2636 template<
typename T>
2638 for(
auto& i: range){
2640 return addressof(i);
2646 template<
typename T>
2648 for(
auto&i : range){
2650 return addressof(i);
2656 template<
typename T>
2658 if constexpr(::std::is_integral_v<T>){
2660 if(mark.
mark(pattern))
2666 template<
typename T>
2670 return result - range.
begin();
2676 template<
typename T>
2678 for(
auto& i: range|::std::views::reverse){
2680 return addressof(i);
2686 template<
typename T>
2688 for(
auto&i : range|::std::views::reverse){
2690 return addressof(i);
2696 template<
typename T>
2698 if constexpr(::std::is_integral_v<T>){
2700 if(mark.
mark(pattern))
2706 template<
typename T>
2710 return result - range.
begin();
2727 #line 31 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
2728 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/string_view.hpp"
2738 namespace constexpr_str_n {
2739 template<
typename char_T>
2746 template<
typename T>
2749 template<
typename T>
2751 auto result =
in_range(pattern, range);
2753 return result - range.data();
2757 template<
typename T>
2760 template<
typename T>
2764 return result - range.data();
2768 template<
typename T>
2771 template<
typename T>
2775 return result - range.data();
2779 template<
typename T>
2782 template<
typename T>
2786 return result - range.data();
2790 template<
typename T>
2793 template<
typename T>
2797 return result - range.data();
2801 template<
typename T>
2804 template<
typename T>
2808 return result - range.
begin();
2814 namespace string_view_n{
2816 template<
typename char_T>
2818 static constexpr size_t npos=range_n::npos;
2821 using base_t::base_t;
2824 [[nodiscard]]
constexpr const char_T*
str()const noexcept{
return base_t::cbegin();}
2825 [[nodiscard]]
constexpr const char_T*
data()const noexcept{
return base_t::cbegin();}
2826 [[nodiscard]]
constexpr operator const char_T*()
const noexcept{
return str();}
2832 return string_view_t(base_t::cbegin()+pos,base_t::size()-pos);
2847 [[nodiscard]]
constexpr size_t find(
const char_T ch)
const{
2848 return in_range_size_t(ch, *
this);
2851 return in_range_but_reverse_size_t(ch, *
this);
2854 return in_range_size_t(str, *
this);
2857 return in_range_but_reverse_size_t(str, *
this);
2860 return in_range_size_t(str, *
this);
2863 return in_range_but_reverse_size_t(str, *
this);
2867 return range_n::find_first_of_size_t(ch, *
this);
2870 return range_n::find_last_of_size_t(ch, *
this);
2873 return range_n::find_first_not_of_size_t(ch, *
this);
2876 return range_n::find_last_not_of_size_t(ch, *
this);
2879 return range_n::find_first_of_size_t(str, *
this);
2882 return range_n::find_last_of_size_t(str, *
this);
2885 return range_n::find_first_not_of_size_t(str, *
this);
2888 return range_n::find_last_not_of_size_t(str, *
this);
2891 return range_n::find_first_of_size_t(str, *
this);
2894 return range_n::find_last_of_size_t(str, *
this);
2897 return range_n::find_first_not_of_size_t(str, *
this);
2900 return range_n::find_last_not_of_size_t(str, *
this);
2910 #line 32 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
2911 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/type_name.hpp"
2929 const char*demangled_name;
2931 #if defined(__clang__)||defined(__GNUC__)
2935 demangled_name=::abi::__cxa_demangle(original_name,
nullptr,&len,&status);
2937 demangled_name=original_name;
2938 len=::std::strlen(original_name);
2939 ::std::free((
void*)demangled_name);
2944 demangled_name=original_name;
2945 len=::std::strlen(original_name);
2947 return base_t{demangled_name,len};
2951 #if defined(__clang__)||defined(__GNUC__)
2954 char*copyed_name=(
char*)::std::malloc(demangled_name.size()+1);
2955 if(copyed_name==
nullptr)
2956 return base_t{
nullptr,0};
2957 ::std::memcpy(copyed_name,demangled_name.data(),demangled_name.size());
2958 copyed_name[demangled_name.size()]=
'\0';
2959 return base_t{copyed_name,demangled_name.
size()};
2963 return demangled_name;
2976 #if defined(__clang__)||defined(__GNUC__)
2979 ::std::free((
void*)begin());
2984 return _tid.get_name();
2986 [[nodiscard]]
inline type_name_t base_type_info_t::type_id_t::get_name()const noexcept{
2989 template<
typename T>
2996 #line 33 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
2997 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/constexpr_str.hpp"
3006 namespace constexpr_str_n{
3008 template<
typename char_T>
3014 [[nodiscard]]
constexpr const char_T*
str()const noexcept{
return base_t::cbegin();}
3015 [[nodiscard]]
constexpr const char_T*
data()const noexcept{
return base_t::cbegin();}
3016 [[nodiscard]]
constexpr operator const char_T*()
const noexcept{
return str();}
3019 return base_t::substr(pos,len);
3022 return base_t::substr(pos);
3025 return base_t::substr(pos,
end);
3028 return base_t::substr(begin,len);
3031 return base_t::substr(begin);
3034 return base_t::substr(begin,
end);
3038 template<
typename char_T>
3048 hash_result(defs::
hash(str, size)),
3051 is_bitmark_workable = bitmark_for_finds.
mark(*
this);
3054 [[nodiscard]]
constexpr hash_t hash()const noexcept{
return hash_result;}
3056 template<
class char_T,
size_t N>
3066 template<constexpr_str_t_literal_helper v>
3072 template<constexpr_str_t_literal_helper str_helper>
3073 [[nodiscard]]
inline consteval auto&
operator ""_constexpr_str()noexcept{
3077 template<
class char_T>
3083 using constexpr_str_n::operator
""_constexpr_str;
3087 template<
typename T>
3091 template<
typename T>
3097 template<
typename T>
3108 template<
typename T>
3119 template<
typename T>
3130 template<
typename T>
3143 #line 34 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
3144 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/logical_bool.hpp"
3171 [[no_unique_address]]
bool _is_true;
3172 [[no_unique_address]]
bool _is_false;
3173 [[no_unique_address]]
bool _is_unknown;
3175 constexpr logical_bool(
special_init_t,
bool is_true,
bool is_false,
bool is_unknown=0):_is_true(is_true),_is_false(is_false),_is_unknown(is_unknown){}
3179 constexpr explicit operator bool()
const{
return _is_true && !_is_unknown;}
3182 swap(aret._is_true,aret._is_false);
3186 return logical_bool{
special_init,a._is_true && b._is_true,a._is_false || b._is_false,a._is_unknown || b._is_unknown};
3189 return logical_bool{
special_init,a._is_true || b._is_true,a._is_false && b._is_false,a._is_unknown || b._is_unknown};
3192 logical_bool aret(a._is_true == b._is_true && a._is_false == b._is_false);
3193 aret._is_unknown = a._is_unknown || b._is_unknown;
3201 #line 35 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
3202 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/zero.hpp"
3215 template<
class T>
requires(
type_info<
decltype(0)>.can_convert_to<T>)
3216 operator T()const noexcept(type_info<decltype(0)>.can_nothrow_convert_to<T>){
return 0;}
3222 const byte*
end=ptr+
sizeof(a);
3224 if((
unsigned char)(*ptr++))
3231 #line 36 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
3232 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/count_able.hpp"
3247 static size_t _number;
3254 if constexpr(type_info<T>.not_has_attribute(
count_able))
3261 #line 37 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
3262 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/invoke.hpp"
3271 template<
typename T>
3273 template<
class...Args>
3274 static constexpr bool able= ::std::is_invocable_v<T,Args...>;
3275 template<
class...Args>
3276 static constexpr bool nothrow= ::std::is_nothrow_invocable_v<T,Args...>;
3278 template<
class...Args>
requires able<Args...>
3279 auto _as(Args&&...rest)
const noexcept(nothrow<Args...>){
3280 return lambda_with_catch(rest...)(
const T&a)
noexcept(nothrow<Args...>){
return a(forward<Args>(rest)...);};
3283 template<
typename T>
3288 #line 38 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
3289 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/maybe_fail_reference.hpp"
3298 template<
typename T>
3307 [[nodiscard]]
bool fail()noexcept{
return!not_fail();}
3313 #line 39 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
3317 #line 30 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/_body.hpp"
3321 #if defined(_VCRUNTIME_H)
3325 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
3333 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
3344 #if defined(_MSC_VER)
3345 #pragma warning(pop)
3347 #undef suppress_msvc_warning
3348 #undef disable_msvc_warning
3349 #undef push_msvc_warning
3350 #undef pop_msvc_warning
3351 #undef push_and_disable_msvc_warning
3354 #undef BIT_POSSIBILITY
3356 #if defined(ELC_VOID_NAME)
3357 #define void the_void
3362 #undef noexcept_as_auto
3364 #undef constexpr_as_auto
3366 #undef using_method_from_base_t
3367 #undef using_method_from_value
3377 #undef template_error
3378 #undef template_warning
3383 #undef is_common_attribute
3384 #undef is_special_attribute
3386 #undef has_attribute
3387 #undef not_has_attribute
3389 #undef float_size_of
3392 #undef def_common_attribute_with_nothing
3393 #undef def_special_attribute_with_nothing
3395 #undef common_attribute_t
3396 #undef special_attribute_t
3399 #undef enabled_by_default
3400 #undef disabled_by_default
3401 #undef enable_if_not_ill_form
3404 #undef was_an_ill_form
3405 #undef was_an_ill_form_with_parameter
3406 #undef was_not_an_ill_form
3407 #undef was_not_an_ill_form_and_noexcept
3408 #undef was_not_an_ill_form_with_parameter
3410 #undef recursive_lambda
3411 #undef get_recursive_lambda_caller
3413 #undef lambda_with_catch
3414 #undef self_recursion
3415 #undef lambda_RLSRRS
3425 #if defined(_MSC_VER)
3431 #undef INTER_NAMESPACE
3432 #undef BREAK_NAMESPACE
3437 #undef template_name
3445 #undef ELC_TEST_EVENTNAME
3447 #undef override_instance_struct
3453 #undef with_no_vtable
3457 #undef no_vtable_struct
3458 #undef no_vtable_class
3462 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
3466 #line 38 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/_body.hpp"
3471 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
3476 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
3479 #if defined(ELC_TEST_ON)
3482 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
3491 #if defined(ELC_TEST)
3492 #error "this part cannot be tested."
3497 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc.hpp"
3510 #if !defined(ELC_APIS_alloc)
3511 #define ELC_APIS_alloc
3512 #if defined(ELC_MEMORY_ALLOC_LOCATION_RECORD)
3513 #include <stacktrace>
3515 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/_tools/decl_system_type.hpp"
3527 #if defined(__linux)||defined(__linux__)||defined(__gnu_linux__)
3528 #define SYSTEM_TYPE linux
3529 #elif defined(_WIN32)||defined(__MINGW32__)||defined(__CYGWIN__)
3530 #define SYSTEM_TYPE windows
3532 #define SYSTEM_TYPE other
3534 #define ERROR_MSG_UNABLE_OS "Unable OS,edit this file on your own or contact ELC's producers."
3538 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc.hpp"
3539 #if SYSTEM_TYPE == windows
3548 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
3557 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
3561 #line 28 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc.hpp"
3564 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
3576 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
3578 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
3589 #define BIT_POSSIBILITY 2
3593 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
3595 #if defined(_MSC_VER)
3596 #pragma warning(push,ELC_WARNING_LEVEL)
3597 #pragma warning(disable:4099)
3598 #pragma warning(disable:26812)
3599 #pragma warning(disable:4584)
3600 #pragma warning(disable:4250)
3601 #pragma warning(disable:26432)
3602 #pragma warning(disable:26435)
3603 #pragma warning(disable:26481)
3604 #pragma warning(disable:26446)
3605 #pragma warning(disable:26434)
3606 #pragma warning(disable:26429)
3607 #pragma warning(disable:26471)
3608 #pragma warning(disable:26474)
3609 #pragma warning(disable:26473)
3610 #pragma warning(disable:26456)
3611 #pragma warning(disable:26485)
3612 #pragma warning(disable:26490)
3613 #pragma warning(disable:26472)
3614 #pragma warning(disable:26482)
3615 #pragma warning(disable:26493)
3617 #if defined(_MSC_VER)
3618 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
3619 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
3620 #define push_msvc_warning() __pragma(warning(push))
3621 #define pop_msvc_warning() __pragma(warning(pop))
3622 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
3624 #define suppress_msvc_warning(...)
3625 #define disable_msvc_warning(...)
3626 #define push_msvc_warning()
3627 #define pop_msvc_warning()
3628 #define push_and_disable_msvc_warning(...)
3631 #if defined(ELC_VOID_NAME)
3636 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
3637 #define noexcept_as_auto MAGIC
3638 #define constexpr_as(...) MAGIC constexpr
3639 #define constexpr_as_auto MAGIC MAGIC constexpr
3641 #define using_method_from_base_t(name,...) \
3642 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
3643 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
3645 return base_t::name(forward<Args>(rest)...);\
3648 #define using_method_from_value(name,value_name,...) \
3649 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
3650 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
3652 return value_name.name(forward<Args>(rest)...);\
3655 #define floop while(__builtin_is_my_dick_still_there())
3656 #define enable_adl(name) void name()noexcept=delete
3658 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
3659 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
3661 #define declvalue(...) (::std::declval<__VA_ARGS__>())
3664 #define template_error(reason) static_assert(template_error_helper<T>,reason)
3666 #define template_warning(reason) template_warning_helper<T>(reason)
3669 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
3670 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
3672 #define is_common_attribute(name) public attribute<T,name<T>>
3673 #define is_special_attribute(name) public attribute<T,name>
3675 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
3676 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
3679 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
3681 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
3684 #define def_common_attribute_with_nothing(name) \
3685 template<typename T>\
3688 #define def_special_attribute_with_nothing(name) \
3691 #define common_attribute_t template<class>class
3692 #define special_attribute_t class
3702 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
3704 #define enabled_by_default class enable_state=void
3706 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
3708 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
3710 #define enable_flag class enable_state
3712 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
3713 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
3714 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
3715 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
3716 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
3719 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
3721 #define get_recursive_lambda_caller(name) \
3722 lambda_with_catch(&)(auto&&...Args){\
3723 return name(name,Args...);\
3728 #define lambda_with_catch(...) [__VA_ARGS__]
3730 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
3732 #define lambda_RLSRRS _my_jb_super_sb_name_
3740 #define elseif else if
3742 #define _big_than_ >
3744 #define _small_than_ <
3746 #if defined(_MSC_VER)
3753 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
3755 #define BREAK_NAMESPACE }
3758 #define template_name template
3760 #define type_name class
3762 #if defined(DEBUG) || defined(_DEBUG)
3763 #define not_in_debug 0
3765 #define not_in_debug 1
3769 #define ec(ch) U ## ch
3771 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
3772 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
3774 #define ELC_TEST_EVENTNAME(name)
3777 #define override_instance_struct \
3779 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
3780 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
3781 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
3782 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
3783 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
3786 #define distinctive __declspec(dllexport)
3792 #define force_inline __forceinline
3793 #elif defined(__GNUC__)
3794 #define force_inline __attribute__((always_inline)) inline
3796 #define force_inline inline
3800 #define with_no_vtable __declspec(novtable)
3802 #define with_no_vtable
3805 #define in_consteval (::std::is_constant_evaluated())
3807 #define no_vtable_struct struct with_no_vtable
3808 #define no_vtable_class class with_no_vtable
3812 #line 31 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc.hpp"
3815 #if SYSTEM_TYPE != windows
3817 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc/default_method/overhead.hpp"
3826 namespace overhead_n{
3829 return max(align,
alignof(
size_t));
3833 return (
size_t(
sizeof(
size_t)/align)+
bool(
sizeof(
size_t)%align))*align;
3852 *
reinterpret_cast<size_t*
>(a)=size;
3855 return*
reinterpret_cast<const size_t*
>(a);
3861 #line 35 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc.hpp"
3864 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc/debug_info/source_location_guard.hpp"
3873 #if defined(_MSC_VER)
3874 #if defined(ELC_MEMORY_ALLOC_LOCATION_RECORD)
3875 #pragma detect_mismatch("ELC_MEMORY_ALLOC_LOCATION_RECORD","true")
3877 #pragma detect_mismatch("ELC_MEMORY_ALLOC_LOCATION_RECORD","false")
3880 #if defined(ELC_MEMORY_ALLOC_LOCATION_RECORD)
3881 distinctive inline ::std::stacktrace_entry operate_source_frame;
3883 const char*_file=
nullptr;
3884 uint_least32_t _line=0;
3885 const char*file()noexcept{
3888 static ::std::string file_cache;
3889 file_cache=operate_source_frame.source_file();
3890 _file=file_cache.c_str();
3897 uint_least32_t line()noexcept{
3900 _line=operate_source_frame.source_line();
3907 void clear()noexcept{
3912 struct source_location_guard{
3914 source_location_guard(
size_t lookup=0)noexcept{
3915 if(!operate_source_frame){
3916 ::std::stacktrace stack = ::std::stacktrace::current(lookup+2,1);
3918 operate_source_frame = stack[0];
3923 ~source_location_guard()noexcept{
3925 operate_source_frame = ::std::stacktrace_entry{};
3935 constexpr const char*
file()noexcept{
return nullptr;}
3936 constexpr uint_least32_t
line()noexcept{
return 0;}
3937 }operate_source_location;
3942 #line 37 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc.hpp"
3945 #if defined(_MSC_VER)
3946 #if defined(ELC_TEST_COUNT_MEMORY_ALLOC)
3947 #pragma detect_mismatch("ELC_TEST_COUNT_MEMORY_ALLOC","true")
3949 #pragma detect_mismatch("ELC_TEST_COUNT_MEMORY_ALLOC","false")
3953 #if defined(ELC_TEST_COUNT_MEMORY_ALLOC)
3954 [[nodiscard]]
inline size_t get_size_of_alloc(
const byte*p,
size_t align)
noexcept;
3955 namespace count_info{
3962 inline void update_memory_using(ptrdiff_t diff)
noexcept{
3964 if(memory_using>memory_using_max)
3965 memory_using_max=memory_using;
3967 inline void clear()noexcept{
3987 #if SYSTEM_TYPE == windows
3991 aret = _aligned_malloc(size,align);
3994 using namespace overhead_n;
3995 void*tmp=::std::aligned_alloc(correct_align(align),correct_size(size,align));
3997 set_overhead(tmp,size);
3998 aret = correct_pointer(tmp,align);
4004 #if defined(ELC_TEST_COUNT_MEMORY_ALLOC)
4006 count_info::alloc_count++;
4007 count_info::alloc_size+=size;
4008 count_info::update_memory_using(size);
4021 [[nodiscard]]
inline byte*realloc(
byte*ptr,
size_t nsize,[[maybe_unused]]
size_t align)
noexcept{
4022 #if defined(ELC_TEST_COUNT_MEMORY_ALLOC)
4023 const auto osize=get_size_of_alloc(ptr,align);
4027 #if SYSTEM_TYPE == windows
4031 aret = _aligned_realloc(ptr,nsize,align);
4034 using namespace overhead_n;
4035 void*tmp=::std::realloc(recorrect_pointer(ptr,align),correct_size(nsize,align));
4037 set_overhead(tmp,nsize);
4038 aret = correct_pointer(tmp,align);
4044 #if defined(ELC_TEST_COUNT_MEMORY_ALLOC)
4046 count_info::alloc_size+=nsize-osize;
4047 count_info::update_memory_using(nsize-osize);
4057 inline void free(
byte*p,[[maybe_unused]]
size_t align)
noexcept{
4058 #if defined(ELC_TEST_COUNT_MEMORY_ALLOC)
4059 const auto size=get_size_of_alloc(p,align);
4060 count_info::free_count++;
4061 count_info::free_size+=size;
4062 count_info::update_memory_using(-ptrdiff_t(size));
4065 #if SYSTEM_TYPE == windows
4067 _aligned_free_dbg(p);
4072 using namespace overhead_n;
4073 ::std::free(recorrect_pointer(p,align));
4080 [[nodiscard]]
inline size_t get_size_of_alloc(
const byte*p,[[maybe_unused]]
size_t align)
noexcept{
4081 #if SYSTEM_TYPE == windows
4083 return _aligned_msize_dbg(remove_const(p),align,0);
4085 return _aligned_msize(remove_const(p),align,0);
4088 using namespace overhead_n;
4089 return get_overhead(recorrect_pointer(p,align));
4093 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
4104 #if defined(_MSC_VER)
4105 #pragma warning(pop)
4107 #undef suppress_msvc_warning
4108 #undef disable_msvc_warning
4109 #undef push_msvc_warning
4110 #undef pop_msvc_warning
4111 #undef push_and_disable_msvc_warning
4114 #undef BIT_POSSIBILITY
4116 #if defined(ELC_VOID_NAME)
4117 #define void the_void
4122 #undef noexcept_as_auto
4124 #undef constexpr_as_auto
4126 #undef using_method_from_base_t
4127 #undef using_method_from_value
4137 #undef template_error
4138 #undef template_warning
4143 #undef is_common_attribute
4144 #undef is_special_attribute
4146 #undef has_attribute
4147 #undef not_has_attribute
4149 #undef float_size_of
4152 #undef def_common_attribute_with_nothing
4153 #undef def_special_attribute_with_nothing
4155 #undef common_attribute_t
4156 #undef special_attribute_t
4159 #undef enabled_by_default
4160 #undef disabled_by_default
4161 #undef enable_if_not_ill_form
4164 #undef was_an_ill_form
4165 #undef was_an_ill_form_with_parameter
4166 #undef was_not_an_ill_form
4167 #undef was_not_an_ill_form_and_noexcept
4168 #undef was_not_an_ill_form_with_parameter
4170 #undef recursive_lambda
4171 #undef get_recursive_lambda_caller
4173 #undef lambda_with_catch
4174 #undef self_recursion
4175 #undef lambda_RLSRRS
4185 #if defined(_MSC_VER)
4191 #undef INTER_NAMESPACE
4192 #undef BREAK_NAMESPACE
4197 #undef template_name
4205 #undef ELC_TEST_EVENTNAME
4207 #undef override_instance_struct
4213 #undef with_no_vtable
4217 #undef no_vtable_struct
4218 #undef no_vtable_class
4222 #line 188 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc.hpp"
4225 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/_tools/undef_decl_system_type.hpp"
4238 #undef ERROR_MSG_UNABLE_OS
4242 #line 191 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc.hpp"
4247 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
4249 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/die.hpp"
4262 #if !defined(ELC_APIS_die)
4263 #define ELC_APIS_die
4266 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/default_data_type.hpp"
4276 typedef char32_t char_t;
4278 typedef int64_t int_t;
4280 typedef uint64_t uint_t;
4282 typedef double float_t;
4284 typedef long double float_size_t;
4289 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/die.hpp"
4292 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
4304 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
4306 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
4317 #define BIT_POSSIBILITY 2
4321 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
4323 #if defined(_MSC_VER)
4324 #pragma warning(push,ELC_WARNING_LEVEL)
4325 #pragma warning(disable:4099)
4326 #pragma warning(disable:26812)
4327 #pragma warning(disable:4584)
4328 #pragma warning(disable:4250)
4329 #pragma warning(disable:26432)
4330 #pragma warning(disable:26435)
4331 #pragma warning(disable:26481)
4332 #pragma warning(disable:26446)
4333 #pragma warning(disable:26434)
4334 #pragma warning(disable:26429)
4335 #pragma warning(disable:26471)
4336 #pragma warning(disable:26474)
4337 #pragma warning(disable:26473)
4338 #pragma warning(disable:26456)
4339 #pragma warning(disable:26485)
4340 #pragma warning(disable:26490)
4341 #pragma warning(disable:26472)
4342 #pragma warning(disable:26482)
4343 #pragma warning(disable:26493)
4345 #if defined(_MSC_VER)
4346 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
4347 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
4348 #define push_msvc_warning() __pragma(warning(push))
4349 #define pop_msvc_warning() __pragma(warning(pop))
4350 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
4352 #define suppress_msvc_warning(...)
4353 #define disable_msvc_warning(...)
4354 #define push_msvc_warning()
4355 #define pop_msvc_warning()
4356 #define push_and_disable_msvc_warning(...)
4359 #if defined(ELC_VOID_NAME)
4364 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
4365 #define noexcept_as_auto MAGIC
4366 #define constexpr_as(...) MAGIC constexpr
4367 #define constexpr_as_auto MAGIC MAGIC constexpr
4369 #define using_method_from_base_t(name,...) \
4370 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
4371 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
4373 return base_t::name(forward<Args>(rest)...);\
4376 #define using_method_from_value(name,value_name,...) \
4377 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
4378 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
4380 return value_name.name(forward<Args>(rest)...);\
4383 #define floop while(__builtin_is_my_dick_still_there())
4384 #define enable_adl(name) void name()noexcept=delete
4386 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
4387 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
4389 #define declvalue(...) (::std::declval<__VA_ARGS__>())
4392 #define template_error(reason) static_assert(template_error_helper<T>,reason)
4394 #define template_warning(reason) template_warning_helper<T>(reason)
4397 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
4398 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
4400 #define is_common_attribute(name) public attribute<T,name<T>>
4401 #define is_special_attribute(name) public attribute<T,name>
4403 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
4404 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
4407 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
4409 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
4412 #define def_common_attribute_with_nothing(name) \
4413 template<typename T>\
4416 #define def_special_attribute_with_nothing(name) \
4419 #define common_attribute_t template<class>class
4420 #define special_attribute_t class
4430 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
4432 #define enabled_by_default class enable_state=void
4434 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
4436 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
4438 #define enable_flag class enable_state
4440 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
4441 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
4442 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
4443 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
4444 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
4447 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
4449 #define get_recursive_lambda_caller(name) \
4450 lambda_with_catch(&)(auto&&...Args){\
4451 return name(name,Args...);\
4456 #define lambda_with_catch(...) [__VA_ARGS__]
4458 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
4460 #define lambda_RLSRRS _my_jb_super_sb_name_
4468 #define elseif else if
4470 #define _big_than_ >
4472 #define _small_than_ <
4474 #if defined(_MSC_VER)
4481 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
4483 #define BREAK_NAMESPACE }
4486 #define template_name template
4488 #define type_name class
4490 #if defined(DEBUG) || defined(_DEBUG)
4491 #define not_in_debug 0
4493 #define not_in_debug 1
4497 #define ec(ch) U ## ch
4499 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
4500 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
4502 #define ELC_TEST_EVENTNAME(name)
4505 #define override_instance_struct \
4507 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
4508 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
4509 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
4510 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
4511 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
4514 #define distinctive __declspec(dllexport)
4520 #define force_inline __forceinline
4521 #elif defined(__GNUC__)
4522 #define force_inline __attribute__((always_inline)) inline
4524 #define force_inline inline
4528 #define with_no_vtable __declspec(novtable)
4530 #define with_no_vtable
4533 #define in_consteval (::std::is_constant_evaluated())
4535 #define no_vtable_struct struct with_no_vtable
4536 #define no_vtable_class class with_no_vtable
4540 #line 20 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/die.hpp"
4543 [[noreturn]]
inline void die()noexcept{
4544 #if defined(_MSC_VER)
4547 #if defined(_WINMAIN_)
4548 ::MessageBoxW(NULL,L
"elc died.",NULL,MB_ICONERROR);
4550 ::std::fputs(
"elc died.\n",stderr);
4551 ::std::fflush(stderr);
4558 #if defined(_MSC_VER)
4568 ::std::mbstate_t stat{};
4569 if(::std::setlocale(LC_CTYPE,
"en_US.utf8")==
nullptr)
4572 char err_msg_in_char[2048];
4573 char* err_msg_write = err_msg_in_char;
4581 s = ::std::c32rtomb(err_msg_write, c, &stat);
4586 *err_msg_write =
'\0';
4587 #if defined(_WINMAIN_)
4588 wchar_t err_msg_in_wchar[2048];
4589 MultiByteToWideChar(CP_UTF8, 0, err_msg_in_char, -1, err_msg_in_wchar, 2048);
4590 ::MessageBoxW(NULL,err_msg_in_wchar,NULL,MB_ICONERROR);
4592 ::std::fputs(
"elc died because:\n",stderr);
4593 ::std::fputs(err_msg_in_char,stderr);
4594 ::std::fputc(
'\n',stderr);
4595 ::std::fflush(stderr);
4602 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
4613 #if defined(_MSC_VER)
4614 #pragma warning(pop)
4616 #undef suppress_msvc_warning
4617 #undef disable_msvc_warning
4618 #undef push_msvc_warning
4619 #undef pop_msvc_warning
4620 #undef push_and_disable_msvc_warning
4623 #undef BIT_POSSIBILITY
4625 #if defined(ELC_VOID_NAME)
4626 #define void the_void
4631 #undef noexcept_as_auto
4633 #undef constexpr_as_auto
4635 #undef using_method_from_base_t
4636 #undef using_method_from_value
4646 #undef template_error
4647 #undef template_warning
4652 #undef is_common_attribute
4653 #undef is_special_attribute
4655 #undef has_attribute
4656 #undef not_has_attribute
4658 #undef float_size_of
4661 #undef def_common_attribute_with_nothing
4662 #undef def_special_attribute_with_nothing
4664 #undef common_attribute_t
4665 #undef special_attribute_t
4668 #undef enabled_by_default
4669 #undef disabled_by_default
4670 #undef enable_if_not_ill_form
4673 #undef was_an_ill_form
4674 #undef was_an_ill_form_with_parameter
4675 #undef was_not_an_ill_form
4676 #undef was_not_an_ill_form_and_noexcept
4677 #undef was_not_an_ill_form_with_parameter
4679 #undef recursive_lambda
4680 #undef get_recursive_lambda_caller
4682 #undef lambda_with_catch
4683 #undef self_recursion
4684 #undef lambda_RLSRRS
4694 #if defined(_MSC_VER)
4700 #undef INTER_NAMESPACE
4701 #undef BREAK_NAMESPACE
4706 #undef template_name
4714 #undef ELC_TEST_EVENTNAME
4716 #undef override_instance_struct
4722 #undef with_no_vtable
4726 #undef no_vtable_struct
4727 #undef no_vtable_class
4731 #line 82 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/die.hpp"
4740 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
4743 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
4756 #if !defined(ELC_LOCALE)
4760 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/default_data_type.hpp"
4772 typedef int64_t
int_t;
4783 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
4784 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/_char.hpp"
4813 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
4815 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
4824 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
4828 #line 20 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
4830 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
4842 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
4844 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
4855 #define BIT_POSSIBILITY 2
4859 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
4861 #if defined(_MSC_VER)
4862 #pragma warning(push,ELC_WARNING_LEVEL)
4863 #pragma warning(disable:4099)
4864 #pragma warning(disable:26812)
4865 #pragma warning(disable:4584)
4866 #pragma warning(disable:4250)
4867 #pragma warning(disable:26432)
4868 #pragma warning(disable:26435)
4869 #pragma warning(disable:26481)
4870 #pragma warning(disable:26446)
4871 #pragma warning(disable:26434)
4872 #pragma warning(disable:26429)
4873 #pragma warning(disable:26471)
4874 #pragma warning(disable:26474)
4875 #pragma warning(disable:26473)
4876 #pragma warning(disable:26456)
4877 #pragma warning(disable:26485)
4878 #pragma warning(disable:26490)
4879 #pragma warning(disable:26472)
4880 #pragma warning(disable:26482)
4881 #pragma warning(disable:26493)
4883 #if defined(_MSC_VER)
4884 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
4885 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
4886 #define push_msvc_warning() __pragma(warning(push))
4887 #define pop_msvc_warning() __pragma(warning(pop))
4888 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
4890 #define suppress_msvc_warning(...)
4891 #define disable_msvc_warning(...)
4892 #define push_msvc_warning()
4893 #define pop_msvc_warning()
4894 #define push_and_disable_msvc_warning(...)
4897 #if defined(ELC_VOID_NAME)
4902 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
4903 #define noexcept_as_auto MAGIC
4904 #define constexpr_as(...) MAGIC constexpr
4905 #define constexpr_as_auto MAGIC MAGIC constexpr
4907 #define using_method_from_base_t(name,...) \
4908 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
4909 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
4911 return base_t::name(forward<Args>(rest)...);\
4914 #define using_method_from_value(name,value_name,...) \
4915 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
4916 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
4918 return value_name.name(forward<Args>(rest)...);\
4921 #define floop while(__builtin_is_my_dick_still_there())
4922 #define enable_adl(name) void name()noexcept=delete
4924 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
4925 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
4927 #define declvalue(...) (::std::declval<__VA_ARGS__>())
4930 #define template_error(reason) static_assert(template_error_helper<T>,reason)
4932 #define template_warning(reason) template_warning_helper<T>(reason)
4935 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
4936 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
4938 #define is_common_attribute(name) public attribute<T,name<T>>
4939 #define is_special_attribute(name) public attribute<T,name>
4941 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
4942 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
4945 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
4947 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
4950 #define def_common_attribute_with_nothing(name) \
4951 template<typename T>\
4954 #define def_special_attribute_with_nothing(name) \
4957 #define common_attribute_t template<class>class
4958 #define special_attribute_t class
4968 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
4970 #define enabled_by_default class enable_state=void
4972 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
4974 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
4976 #define enable_flag class enable_state
4978 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
4979 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
4980 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
4981 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
4982 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
4985 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
4987 #define get_recursive_lambda_caller(name) \
4988 lambda_with_catch(&)(auto&&...Args){\
4989 return name(name,Args...);\
4994 #define lambda_with_catch(...) [__VA_ARGS__]
4996 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
4998 #define lambda_RLSRRS _my_jb_super_sb_name_
5006 #define elseif else if
5008 #define _big_than_ >
5010 #define _small_than_ <
5012 #if defined(_MSC_VER)
5019 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
5021 #define BREAK_NAMESPACE }
5024 #define template_name template
5026 #define type_name class
5028 #if defined(DEBUG) || defined(_DEBUG)
5029 #define not_in_debug 0
5031 #define not_in_debug 1
5035 #define ec(ch) U ## ch
5037 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
5038 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
5040 #define ELC_TEST_EVENTNAME(name)
5043 #define override_instance_struct \
5045 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
5046 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
5047 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
5048 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
5049 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
5052 #define distinctive __declspec(dllexport)
5058 #define force_inline __forceinline
5059 #elif defined(__GNUC__)
5060 #define force_inline __attribute__((always_inline)) inline
5062 #define force_inline inline
5066 #define with_no_vtable __declspec(novtable)
5068 #define with_no_vtable
5071 #define in_consteval (::std::is_constant_evaluated())
5073 #define no_vtable_struct struct with_no_vtable
5074 #define no_vtable_class class with_no_vtable
5078 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
5079 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/zh_cn.hpp"
5096 inline namespace gc{
5100 inline namespace code_convert{
5104 inline namespace lib_load{
5107 inline namespace exception{
5111 inline namespace base_read{
5117 inline namespace package_symbol_loader{
5125 #line 23 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
5126 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
5137 #if defined(_MSC_VER)
5138 #pragma warning(pop)
5140 #undef suppress_msvc_warning
5141 #undef disable_msvc_warning
5142 #undef push_msvc_warning
5143 #undef pop_msvc_warning
5144 #undef push_and_disable_msvc_warning
5147 #undef BIT_POSSIBILITY
5149 #if defined(ELC_VOID_NAME)
5150 #define void the_void
5155 #undef noexcept_as_auto
5157 #undef constexpr_as_auto
5159 #undef using_method_from_base_t
5160 #undef using_method_from_value
5170 #undef template_error
5171 #undef template_warning
5176 #undef is_common_attribute
5177 #undef is_special_attribute
5179 #undef has_attribute
5180 #undef not_has_attribute
5182 #undef float_size_of
5185 #undef def_common_attribute_with_nothing
5186 #undef def_special_attribute_with_nothing
5188 #undef common_attribute_t
5189 #undef special_attribute_t
5192 #undef enabled_by_default
5193 #undef disabled_by_default
5194 #undef enable_if_not_ill_form
5197 #undef was_an_ill_form
5198 #undef was_an_ill_form_with_parameter
5199 #undef was_not_an_ill_form
5200 #undef was_not_an_ill_form_and_noexcept
5201 #undef was_not_an_ill_form_with_parameter
5203 #undef recursive_lambda
5204 #undef get_recursive_lambda_caller
5206 #undef lambda_with_catch
5207 #undef self_recursion
5208 #undef lambda_RLSRRS
5218 #if defined(_MSC_VER)
5224 #undef INTER_NAMESPACE
5225 #undef BREAK_NAMESPACE
5230 #undef template_name
5238 #undef ELC_TEST_EVENTNAME
5240 #undef override_instance_struct
5246 #undef with_no_vtable
5250 #undef no_vtable_struct
5251 #undef no_vtable_class
5255 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
5261 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
5264 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
5272 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
5284 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
5286 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
5297 #define BIT_POSSIBILITY 2
5301 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
5303 #if defined(_MSC_VER)
5304 #pragma warning(push,ELC_WARNING_LEVEL)
5305 #pragma warning(disable:4099)
5306 #pragma warning(disable:26812)
5307 #pragma warning(disable:4584)
5308 #pragma warning(disable:4250)
5309 #pragma warning(disable:26432)
5310 #pragma warning(disable:26435)
5311 #pragma warning(disable:26481)
5312 #pragma warning(disable:26446)
5313 #pragma warning(disable:26434)
5314 #pragma warning(disable:26429)
5315 #pragma warning(disable:26471)
5316 #pragma warning(disable:26474)
5317 #pragma warning(disable:26473)
5318 #pragma warning(disable:26456)
5319 #pragma warning(disable:26485)
5320 #pragma warning(disable:26490)
5321 #pragma warning(disable:26472)
5322 #pragma warning(disable:26482)
5323 #pragma warning(disable:26493)
5325 #if defined(_MSC_VER)
5326 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
5327 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
5328 #define push_msvc_warning() __pragma(warning(push))
5329 #define pop_msvc_warning() __pragma(warning(pop))
5330 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
5332 #define suppress_msvc_warning(...)
5333 #define disable_msvc_warning(...)
5334 #define push_msvc_warning()
5335 #define pop_msvc_warning()
5336 #define push_and_disable_msvc_warning(...)
5339 #if defined(ELC_VOID_NAME)
5344 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
5345 #define noexcept_as_auto MAGIC
5346 #define constexpr_as(...) MAGIC constexpr
5347 #define constexpr_as_auto MAGIC MAGIC constexpr
5349 #define using_method_from_base_t(name,...) \
5350 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
5351 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
5353 return base_t::name(forward<Args>(rest)...);\
5356 #define using_method_from_value(name,value_name,...) \
5357 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
5358 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
5360 return value_name.name(forward<Args>(rest)...);\
5363 #define floop while(__builtin_is_my_dick_still_there())
5364 #define enable_adl(name) void name()noexcept=delete
5366 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
5367 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
5369 #define declvalue(...) (::std::declval<__VA_ARGS__>())
5372 #define template_error(reason) static_assert(template_error_helper<T>,reason)
5374 #define template_warning(reason) template_warning_helper<T>(reason)
5377 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
5378 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
5380 #define is_common_attribute(name) public attribute<T,name<T>>
5381 #define is_special_attribute(name) public attribute<T,name>
5383 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
5384 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
5387 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
5389 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
5392 #define def_common_attribute_with_nothing(name) \
5393 template<typename T>\
5396 #define def_special_attribute_with_nothing(name) \
5399 #define common_attribute_t template<class>class
5400 #define special_attribute_t class
5410 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
5412 #define enabled_by_default class enable_state=void
5414 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
5416 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
5418 #define enable_flag class enable_state
5420 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
5421 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
5422 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
5423 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
5424 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
5427 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
5429 #define get_recursive_lambda_caller(name) \
5430 lambda_with_catch(&)(auto&&...Args){\
5431 return name(name,Args...);\
5436 #define lambda_with_catch(...) [__VA_ARGS__]
5438 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
5440 #define lambda_RLSRRS _my_jb_super_sb_name_
5448 #define elseif else if
5450 #define _big_than_ >
5452 #define _small_than_ <
5454 #if defined(_MSC_VER)
5461 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
5463 #define BREAK_NAMESPACE }
5466 #define template_name template
5468 #define type_name class
5470 #if defined(DEBUG) || defined(_DEBUG)
5471 #define not_in_debug 0
5473 #define not_in_debug 1
5477 #define ec(ch) U ## ch
5479 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
5480 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
5482 #define ELC_TEST_EVENTNAME(name)
5485 #define override_instance_struct \
5487 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
5488 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
5489 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
5490 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
5491 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
5494 #define distinctive __declspec(dllexport)
5500 #define force_inline __forceinline
5501 #elif defined(__GNUC__)
5502 #define force_inline __attribute__((always_inline)) inline
5504 #define force_inline inline
5508 #define with_no_vtable __declspec(novtable)
5510 #define with_no_vtable
5513 #define in_consteval (::std::is_constant_evaluated())
5515 #define no_vtable_struct struct with_no_vtable
5516 #define no_vtable_class class with_no_vtable
5520 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
5524 #line 20 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
5527 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/lifetime/_body.hpp"
5536 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/lifetime/defs.hpp"
5545 namespace lifetime_n{
5553 template<
class T,
class...Args>
5555 template<
class T,
class...Args>
5557 template<
class T,
class...Args>
5603 template<
class T>
requires(::std::is_trivially_copyable_v<T>)
5605 if constexpr(
sizeof(T)==
sizeof(
unsigned char))
5606 ::std::memset((
unsigned char*)to,(
unsigned char)value,size);
5607 elseif constexpr(
sizeof(T)==
sizeof(
wchar_t))
5608 ::std::wmemset((
wchar_t*)to,(wchar_t)value,size);
5611 ::std::memset(to,
zero,size*
sizeof(T));
5613 ::std::fill_n(to,size,value);
5616 template<
class T>
requires(::std::is_trivially_copyable_v<T>)
5618 if constexpr(
sizeof(T)>=
sizeof(::std::max_align_t))
5620 ::std::memset(to,
zero,
sizeof(T));
5636 template<
typename T>
5639 template<
class...Args>
5641 template<
class...Args>
5643 template<
class...Args>
5646 template<
class...Args>
requires able<Args...>
5648 return T(forward<Args>(rest)...);
5655 template_error(
"You can\'t construct an array for never_in_array type.");
5657 template<
class...Args>
requires able<Args...>
5660 while(tmp--)
new(_to+tmp)T(forward<Args>(rest)...);
5662 template<
class...Args>
requires able<Args...>
5664 never_in_array_check();
5665 base_call(forward<Args>(rest)...);
5670 never_in_array_check();
5671 if constexpr(trivial<const T&> && ::std::is_trivially_copyable_v<T>)
5674 base_call(forward<const T&>(v));
5679 never_in_array_check();
5680 if constexpr(!trivial<>)
5687 template<
class...Args>
requires able<Args...>
5689 new(_to)T(forward<Args>(rest)...);
5691 template<
class...Args>
requires able<Args...>
5693 base_call(forward<Args>(rest)...);
5698 if constexpr(trivial<const T&> && ::std::is_trivially_copyable_v<T>)
5701 base_call(forward<const T&>(v));
5706 if constexpr(!trivial<>)
5724 template<
typename T>
5738 static constexpr bool able=destruct_able<T>||(::std::is_array_v<T>&&able<::std::remove_extent_t<T>>);
5740 static constexpr bool nothrow=destruct_nothrow<T>||(::std::is_array_v<T>&¬hrow<::std::remove_extent_t<T>>);
5742 static constexpr bool trivial=destruct_trivial<T>||(::std::is_array_v<T>&&trivial<::std::remove_extent_t<T>>);
5744 template<
class T>
requires able<T>
5746 if constexpr(!trivial<T>)
5747 if constexpr(::std::is_array_v<T>)
5749 base_call(addressof(i));
5755 template<
class T>
requires able<T>
5756 static void base_call([[maybe_unused]]T*begin,[[maybe_unused]]
size_t size)
noexcept(nothrow<T>){
5758 template_error(
"You cannot perform array operations on never_in_array type.");
5759 if constexpr(!trivial<T>)
5760 while(size--)base_call(begin+size);
5763 template<
class T>
requires able<T>
5770 template<
class T>
requires able<T>
5772 base_call(begin,_size);
5796 template<
class T,
class...Args>
5798 template<
class T,
class...Args>
5800 template<
class T,
class...Args>
5803 template<
class T>
requires able<T>
5813 template<
class...Args>
requires able<T,Args...>
5816 template_error(
"You cannot perform array operations on never_in_array type.");
5818 construct<T>[_to][_size](forward<Args>(rest)...);
5825 template<
class...Args>
requires able<T,Args...>
5828 construct<T>[_to](forward<Args>(rest)...);
5839 static constexpr bool r_able=copy_construct_able<T>?
5840 copy_construct_trivial<T>||!(construct<T>.trivial<>&©_assign_trivial<T>)
5843 static constexpr bool able=r_able<T>?
true:(construct<T>.able<>&©_assign_able<T>);
5845 static constexpr bool nothrow=r_able<T>?copy_construct_nothrow<T>:
5846 (construct<T>.nothrow<>&©_assign_nothrow<T>);
5848 static constexpr bool trivial=r_able<T>?copy_construct_trivial<T>:
5849 (construct<T>.trivial<>&©_assign_trivial<T>);
5851 template<
class T>
requires able<T>
5853 if constexpr(trivial<T>)
5854 return reinterpret_cast<T*
>(::std::memcpy(to,
add_const(from),
sizeof(T)));
5856 if constexpr(r_able<T>)
5866 template<
class T>
requires able<T>
5867 static T*
base_call(T*to,
const T*from,
size_t size)
noexcept(nothrow<T>){
5868 if constexpr(trivial<T>)
5869 return reinterpret_cast<T*
>(::std::memcpy(to,
add_const(from),
sizeof(T)*size));
5872 base_call(to+size,from+size);
5877 template<
class T>
requires able<T>
5879 {
return base_call(to,from);}
5881 template<
class T>
requires able<T>
5883 {
return base_call(to(),from());}
5885 template<
class T>
requires able<T>
5887 {
return base_call(to(),from());}
5890 template<
class T>
requires able<T>
5892 {
return base_call(to,from,size);}
5894 template<
class T>
requires able<T>
5896 {
return base_call(to(),from(),size);}
5898 template<
class T>
requires able<T>
5900 {
return base_call(to(),from(),size);}
5902 template<
class T>
requires able<T>
5904 if constexpr(r_able<T>)
5905 construct<T>[to](from);
5913 template<
class T>
requires able<T>
5914 static T*
base_call(T*to,
const T&from,
size_t size)
noexcept(nothrow<T>){
5916 template_error(
"You cannot perform array operations on never_in_array type.");
5917 if constexpr(::std::is_trivially_copyable_v<T>)
5921 base_call(to+size,from);
5925 template<
class T>
requires able<T>
5927 {
return base_call(to,from);}
5931 template<
class T>
requires able<T>
5933 return base_call(to,from,_size);
5935 template<
class T>
requires able<T>
5937 return base_call(to,from,_size);
5939 template<
class T>
requires able<T>
5941 return operator()(to(),from());
5943 template<
class T>
requires able<T>
5945 return operator()(to(),from());
5953 static constexpr bool r_able=move_construct_able<T>?
5959 static constexpr bool nothrow=r_able<T>?move_construct_nothrow<T>:
5962 static constexpr bool trivial=r_able<T>?move_construct_trivial<T>:
5965 template<
class T>
requires able<T>
5967 if constexpr(trivial<T>)
5968 return reinterpret_cast<T*
>(::std::memcpy(to,
add_const(from),
sizeof(T)));
5970 if constexpr(r_able<T>){
5971 construct<T>[to](::std::move(*from));
5977 template<
class T>
requires able<T>
5978 static T*
base_call(T*to,T*from,
size_t size)
noexcept(nothrow<T>){
5980 template_error(
"You cannot perform array operations on never_in_array type.");
5981 if constexpr(trivial<T>)
5982 return reinterpret_cast<T*
>(::std::memcpy(to,
add_const(from),
sizeof(T)*size));
5984 if constexpr(r_able<T>){
5986 construct<T>[to+size](::std::move(from[size]));
5993 template<
class T>
requires able<T>
5995 {
return base_call(to,from);}
5997 template<
class T>
requires able<T>
5999 {
return base_call(to(),from());}
6001 template<
class T>
requires able<T>
6003 {
return base_call(to(),from());}
6007 template<
class T>
requires able<T>
6009 return base_call(to,from,_size);
6011 template<
class T>
requires able<T>
6013 return operator()(to(),from());
6015 template<
class T>
requires able<T>
6017 return operator()(to(),from());
6031 template<
class T>
requires able<T>
6037 template<
class T>
requires able<T>
6038 static T*
base_call(T*to,T*from,
size_t size)
noexcept(nothrow<T>){
6040 template_error(
"You cannot perform array operations on never_in_array type.");
6046 template<
class T>
requires able<T>
6048 {
return base_call(to,from);}
6050 template<
class T>
requires able<T>
6052 {
return base_call(to(),from());}
6054 template<
class T>
requires able<T>
6056 {
return base_call(to(),from());}
6060 template<
class T>
requires able<T>
6062 return base_call(to,from,_size);
6064 template<
class T>
requires able<T>
6066 return operator()(to(),from());
6068 template<
class T>
requires able<T>
6070 return operator()(to(),from());
6086 [[nodiscard]]
constexpr T
operator()(
const T&a)
const noexcept{
6087 return copy_construct<T>(a);
6093 static constexpr bool r_able=copy_assign_able<T>?
6094 copy_assign_trivial<T>||!(copy_construct_trivial<T>&&
destruct.
trivial<T>)
6097 static constexpr bool able=r_able<T>?
true:(copy_construct_able<T>&&
destruct.
able<T>);
6099 static constexpr bool nothrow=r_able<T>?copy_assign_nothrow<T>:
6102 static constexpr bool trivial=r_able<T>?copy_assign_trivial<T>:
6105 template<
class T>
requires able<T>
6107 if constexpr(r_able<T>)
6111 construct<T>[&a](b);
6115 template<
class T>
requires able<T>
6116 static T*
base_call(T*to,
const T*from,
size_t size)
noexcept(nothrow<T>){
6117 if constexpr(trivial<T>)
6118 ::std::memcpy(to,
add_const(from),size*
sizeof(T));
6121 base_call(to[size],from[size]);
6125 template<
class T>
requires able<T>
6126 static T*
base_call(T* to,
const T& from,
size_t size)
noexcept(nothrow<T>){
6127 if constexpr(trivial<T>)
6131 base_call(to[size],from);
6135 template<
class T>
requires able<T>
6137 return base_call(a,b);
6142 template<
class T>
requires able<T>
6144 return base_call(to,from,_size);
6146 template<
class T>
requires able<T>
6148 return operator()(to(),from());
6150 template<
class T>
requires able<T>
6152 return operator()(to(),from());
6154 template<
class T>
requires able<T>
6156 return base_call(to(),from,_size);
6158 template<
class T>
requires able<T>
6160 return base_call(to(),from,_size);
6168 static constexpr bool r_able=move_assign_able<T>;
6176 template<
class T>
requires able<T>
6178 if constexpr(r_able<T>)
6185 template<
class T>
requires able<T>
6186 static T*
base_call(T*to,T*from,
size_t size)
noexcept(nothrow<T>){
6187 if constexpr(trivial<T>)
6188 ::std::memcpy(to,
add_const(from),size*
sizeof(T));
6191 base_call(to[size],from[size]);
6196 template<
class T>
requires able<T>
6198 return base_call(a,
move(b));
6203 template<
class T>
requires able<T>
6205 return base_call(to,from,_size);
6207 template<
class T>
requires able<T>
6209 return operator()(to(),from());
6211 template<
class T>
requires able<T>
6213 return operator()(to(),from());
6222 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/lifetime/_body.hpp"
6223 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/lifetime/_export.hpp"
6232 #define export using lifetime_n::
6246 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/lifetime/_body.hpp"
6247 #if defined(ELC_TEST_ON)
6248 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/lifetime/_test.hpp"
6257 namespace lifetime_n{
6262 inline void test_log_out(){
6264 inline void test_end(){
6271 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/lifetime/_body.hpp"
6276 #line 23 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
6280 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/_body.hpp"
6290 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/flag.hpp"
6310 [[nodiscard]]
explicit operator bool()const noexcept{
return _m;}
6321 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/_body.hpp"
6322 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/mark_type.hpp"
6338 template<
typename T>
6350 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/_body.hpp"
6352 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/iterator.hpp"
6361 namespace iterator_n{
6362 using namespace memory;
6363 template<
typename base_t_w>
6368 template<
typename build_base_t_T>
requires(construct<base_t_rw>.able<build_base_t_T>)
6369 constexpr reverse_base_t(build_base_t_T&& a)
noexcept(construct<base_t_rw>.nothrow<build_base_t_T>):
_m(a){}
6374 template<
typename base_t>
requires(
compare.
able<base_t>)
6376 return compare((
const base_t&)b.
_m,(
const base_t&)a.
_m);
6378 template<
typename base_t,
typename T>
requires(
compare.
able<T,base_t> && type_info<remove_cvref<T>> != type_info<reverse_base_t<base_t>::base_t_rw>)
6382 template<
typename base_t,
typename T>
requires(
compare.
able<base_t,T> && type_info<remove_cvref<T>> != type_info<reverse_base_t<base_t>::base_t_rw>)
6386 template<
typename base_t,
typename T>
requires(
equal.
able<T,base_t>)
6388 return equal(b,(
const base_t&)a.
_m);
6390 template<
typename base_t,
typename T>
requires(
equal.
able<base_t,T>)
6392 return equal((
const base_t&)b.
_m,a);
6395 template<
typename value_t,
typename base_t_w>
6397 template<
typename,
typename>
6406 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6409 return noexcept(
declvalue(base_t_w)->get_handle());
6411 return noexcept(
declvalue(base_t_w).get_handle());
6413 [[nodiscard]]
inline value_t*
handle_getter()const noexcept(is_handle_getter_noexcept()){
6414 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6415 return ((base_t_w)
_m);
6423 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6426 return noexcept(
declvalue(base_t_w)->get_value());
6428 return noexcept(
declvalue(base_t_w).get_value());
6432 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6435 return type_info<
decltype(((base_t_w)
_m)->get_value())>;
6437 return type_info<
decltype(((base_t_w)
_m).get_value())>;
6444 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6445 return *((base_t_w)
_m);
6447 return ((base_t_w)
_m)->get_value();
6449 return ((base_t_w)
_m).get_value();
6451 return *handle_getter();
6455 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6458 return noexcept(
declvalue(base_t_w)->get_next());
6460 return noexcept(
declvalue(base_t_w).get_next());
6462 [[nodiscard]]
inline base_t_w
next_getter()const noexcept(is_next_getter_noexcept()){
6463 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6464 return ((base_t_w)
_m)+1;
6466 return ((base_t_w)
_m)->get_next();
6468 return ((base_t_w)
_m).get_next();
6472 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6475 return noexcept(
declvalue(base_t_w)->get_before());
6477 return noexcept(
declvalue(base_t_w).get_before());
6479 [[nodiscard]]
inline base_t_w
before_getter()const noexcept(is_before_getter_noexcept()){
6480 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6481 return ((base_t_w)
_m)-1;
6483 return ((base_t_w)
_m)->get_before();
6485 return ((base_t_w)
_m).get_before();
6491 template<typename build_base_t_T> requires(construct<
base_t_rw>.able<build_base_t_T>)
6495 template<
typename other_T,
typename other_base_t>
requires(construct<base_t_rw>.able<other_base_t>)
6499 [[nodiscard]]
constexpr value_t*
operator->()noexcept(is_handle_getter_noexcept()){
return handle_getter(); }
6503 template<
typename other_value_t,
typename other_base_t_w>
requires(
equal.
able<base_t_rw,other_base_t_w>)
6507 template<
typename other_value_t,
typename other_base_t_w>
6513 template<
typename value_t,
typename base_t_w>
6517 template<
typename value_t,
typename base_t_w>
6522 using base_t::is_before_getter_noexcept;
6523 using base_t::is_next_getter_noexcept;
6524 using base_t::before_getter;
6525 using base_t::next_getter;
6528 using base_t::base_t;
6532 constexpr this_t&
operator--()&
noexcept(is_before_getter_noexcept()){
return*
this=before_getter();}
6536 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6537 return base_t::_m+num;
6551 template<
typename value_t,
typename base_t_w>
6553 template<
typename value_t,
typename base_t_w>
6556 template<
typename value_t,
typename base_t_w=value_t*>
6558 template<
typename value_t,
typename base_t_w=const value_t*>
6560 template<
typename value_t,
typename base_t_w=value_t*>
6562 template<
typename value_t,
typename base_t_w=const value_t*>
6573 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/_body.hpp"
6574 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/list.hpp"
6584 template<
typename T>
6589 template<
typename T>
6594 friend iterator_t<T,this_t*>::base_t;
6600 [[nodiscard]]
this_t*get_before()noexcept{
return _before;}
6601 [[nodiscard]]this_t*get_next()noexcept{
return _next;}
6603 constexpr cons_t(this_t*a,this_t*b):_before(a),_next(b){}
6605 constexpr void set_before(this_t*a){
6609 constexpr void set_next(this_t*a){
6613 constexpr void insert_to_before(this_t*a){
6614 set_before(a->_before);
6617 constexpr void bind_with(this_t*a)
noexcept{
6621 constexpr void remove_from_list()noexcept{
6622 _before->set_next(_next);
6625 return attribute_t::get_handle();
6642 template<
typename T>
6650 constexpr list_t()noexcept{_begin.bind_with(&_end);}
6652 a->insert_to_before(&_end);
6657 [[nodiscard]]
constexpr bool empty()const noexcept{
return _begin.get_next()==&_end;}
6662 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/_body.hpp"
6664 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/function_base.hpp"
6673 namespace function_base_n{
6674 #if !defined(_MSC_VER)
6678 template<
typename Ret_t,
typename T,
typename...Args_t,
bool nothrow>
6680 {
using type=Ret_t(Args_t...)
noexcept(nothrow);};
6682 template<
typename Ret_t,
typename T,
typename...Args_t,
bool nothrow>
6684 {
using type=Ret_t(Args_t...)
noexcept(nothrow);};
6686 template<
typename Ret_t,
typename T,
typename...Args_t,
bool nothrow>
6688 {
using type=Ret_t(Args_t...)
noexcept(nothrow);};
6690 template<
typename Ret_t,
typename T,
typename...Args_t,
bool nothrow>
6692 {
using type=Ret_t(Args_t...)
noexcept(nothrow);};
6694 template<
typename T>
6696 if constexpr(::std::is_function_v<T>)
6697 return type_info<T>;
6698 elseif constexpr(is_pointer<T> && ::std::is_function_v<::std::remove_pointer_t<T>>)
6703 template<
typename T>
6712 template<
typename T>
6719 template<
class T,
class Func_t=get_function_type<T>>
6721 template<
class T,
bool nothrow,
class Ret_t,
class...Args_t>
6723 static_assert(!::std::is_function_v<T>);
6729 Ret_t operator()(Args_t...args)noexcept(nothrow || invoke<T>.nothrow<Args_t...>){
6731 if constexpr(!invoke<T>.able<Args_t...>)
6736 if constexpr(type_info<Ret_t> != type_info<void>)
6737 return _value(forward<Args_t>(args)...);
6739 _value(forward<Args_t>(args)...);
6741 Ret_t
operator()(Args_t...args)const noexcept(nothrow || invoke<const T>.nothrow<Args_t...>) requires(invoke<const T>.able<Args_t...>){
6743 if constexpr(!invoke<T>.able<Args_t...>)
6748 if constexpr(type_info<Ret_t> != type_info<void>)
6749 return _value(forward<Args_t>(args)...);
6751 _value(forward<Args_t>(args)...);
6758 struct function_type_getter_helper{};
6760 template<
typename Ret_t,
typename T,
typename...Args_t>
6761 struct function_type_getter_helper<Ret_t(T::*)(Args_t...)>
6762 {
using type=Ret_t(Args_t...);};
6764 template<
typename Ret_t,
typename T,
typename...Args_t>
6765 struct function_type_getter_helper<Ret_t(T::*)(Args_t...)&>
6766 {
using type=Ret_t(Args_t...);};
6768 template<
typename Ret_t,
typename T,
typename...Args_t>
6769 struct function_type_getter_helper<Ret_t(T::*)(Args_t...)const>
6770 {
using type=Ret_t(Args_t...);};
6772 template<
typename Ret_t,
typename T,
typename...Args_t>
6773 struct function_type_getter_helper<Ret_t(T::*)(Args_t...)const&>
6774 {
using type=Ret_t(Args_t...);};
6776 template<
typename Ret_t,
typename T,
typename...Args_t>
6777 struct function_type_getter_helper<Ret_t(T::*)(Args_t...)noexcept>
6778 {
using type=Ret_t(Args_t...)noexcept;};
6780 template<typename Ret_t,typename T,typename...Args_t>
6781 struct function_type_getter_helper<Ret_t(T::*)(Args_t...)&noexcept>
6782 {
using type=Ret_t(Args_t...)noexcept;};
6784 template<typename Ret_t,typename T,typename...Args_t>
6785 struct function_type_getter_helper<Ret_t(T::*)(Args_t...)const noexcept>
6786 {
using type=Ret_t(Args_t...)noexcept;};
6788 template<typename Ret_t,typename T,typename...Args_t>
6789 struct function_type_getter_helper<Ret_t(T::*)(Args_t...)const&noexcept>
6790 {
using type=Ret_t(Args_t...)noexcept;};
6792 template<typename T>
6793 [[nodiscard]]constexpr auto function_type_getter_conditional_helper(){
6794 if constexpr(::std::is_function_v<T>)
6795 return type_info<T>;
6796 elseif constexpr(is_pointer<T> && ::std::is_function_v<::std::remove_pointer_t<T>>)
6797 return function_type_getter_conditional_helper<::std::remove_pointer_t<T>>();
6799 return type_info<
type_name function_type_getter_helper<
decltype(&T::operator())>::type>;
6801 template<
typename T>
6802 struct function_type_getter{
6803 typedef decltype(function_type_getter_conditional_helper<T>())
::template_name type type;
6810 template<
typename T>
6817 template<
class T,
class Func_t=get_function_type<T>>
6818 class function_data_warpper_t;
6819 template<
class T,
class Ret_t,
class...Args_t>
6820 struct function_data_warpper_t<T,Ret_t(Args_t...)noexcept>{
6821 static_assert(!::std::is_function_v<T>);
6825 function_data_warpper_t(T a)
noexcept(construct<T>.nothrow<T>):_value(a){}
6826 ~function_data_warpper_t()noexcept(destruct.nothrow<T>)=default;
6827 Ret_t operator()(Args_t...args)noexcept{
6829 if constexpr(!invoke<T>.able<Args_t...>)
6834 if constexpr(type_info<Ret_t> != type_info<void>)
6835 return _value(forward<Args_t>(args)...);
6837 _value(forward<Args_t>(args)...);
6839 Ret_t operator()(Args_t...args)const noexcept requires(invoke<const T>.able<Args_t...>){
6841 if constexpr(!invoke<T>.able<Args_t...>)
6846 if constexpr(type_info<Ret_t> != type_info<void>)
6847 return _value(forward<Args_t>(args)...);
6849 _value(forward<Args_t>(args)...);
6851 [[nodiscard]]
auto&get_data()noexcept{
return _value;}
6857 template<
class T,
class Ret_t,
class...Args_t>
6858 struct function_data_warpper_t<T,Ret_t(Args_t...)>{
6859 static_assert(!::std::is_function_v<T>);
6863 function_data_warpper_t(T a)
noexcept(construct<T>.nothrow<T>):_value(a){}
6864 ~function_data_warpper_t()noexcept(destruct.nothrow<T>)=default;
6865 Ret_t operator()(Args_t...args)noexcept(invoke<T>.nothrow<Args_t...>){
6867 if constexpr(!invoke<T>.able<Args_t...>)
6872 if constexpr(type_info<Ret_t> != type_info<void>)
6873 return _value(forward<Args_t>(args)...);
6875 _value(forward<Args_t>(args)...);
6877 Ret_t operator()(Args_t...args)const noexcept(invoke<const T>.nothrow<Args_t...>) requires(invoke<const T>.able<Args_t...>){
6879 if constexpr(!invoke<T>.able<Args_t...>)
6884 if constexpr(type_info<Ret_t> != type_info<void>)
6885 return _value(forward<Args_t>(args)...);
6887 _value(forward<Args_t>(args)...);
6889 [[nodiscard]]
auto&get_data()noexcept{
return _value;}
6890 [[nodiscard]]
const auto&get_data()const noexcept{
return _value;}
6894 using function_base_n::get_function_type;
6895 using function_base_n::function_data_warpper_t;
6899 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/_body.hpp"
6903 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
6908 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/_body.hpp"
6917 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/_body.hpp"
6926 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/defs.hpp"
6942 using ::elc::defs::memory::gc_n::gc_for_alloc;
6946 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/default_method/defs.hpp"
6955 namespace default_method{
6957 #if defined(_MSC_VER)
6958 #if defined(ELC_TEST_CHECK_MEMORY_LACK)
6959 #pragma detect_mismatch("ELC_TEST_CHECK_MEMORY_LACK","true")
6961 #pragma detect_mismatch("ELC_TEST_CHECK_MEMORY_LACK","false")
6965 [[nodiscard]]
inline byte*
base_realloc(
byte*ptr,
size_t nsize,
size_t align)
noexcept{
6967 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
6969 stest_uneventlog(ptr);
6973 stest_uneventlog(ptr);
6981 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
6991 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
6992 auto tmp=stest_geteventlistfromlog(p);
6994 stest_putsf(L
"释放了已释放或未分配指针%p,当前的事件记录如下:",p);
6995 stest_printeventlist(stderr,stest_geteventlist());
6999 stest_deleteevent(tmp);
7000 stest_uneventlog(p);
7012 template<
typename T>
7017 template<
typename T>
7022 template_error(
"You cannot perform array operations on never_in_array type.");
7023 return ::std::assume_aligned<alignof(T)>(
base_aligned_alloc(
alignof(T),
sizeof(T)*size));
7025 template<
typename T>
7030 template<
typename T>
7034 template<
typename T>
7041 template_error(
"You cannot perform array operations on never_in_array type.");
7048 #line 20 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/defs.hpp"
7051 template<
typename T>
7057 return default_method::alloc_method(type_info<T>);
7059 template<
typename T>
7066 return default_method::alloc_method(type_info<T>,size);
7069 template<
typename T>
7070 inline size_t get_size_of_alloc_method(
const T*arg)
noexcept{
7075 return default_method::get_size_of_alloc_method(arg);
7078 template<
typename T>
7079 inline void free_method(T*arg)
noexcept{
7083 default_method::free_method(arg);
7086 template<
typename T>
7087 inline void*realloc_method(T*&ptr,
size_t new_size)
noexcept{
7095 return default_method::realloc_method(ptr,new_size);
7109 while(!
assign(tmp,alloc_method(type_info<T>)))gc_for_alloc();
7110 return reinterpret_cast<T*
>(tmp);
7115 template_error(
"You can\'t alloc an array for never_in_array type.");
7118 while(!
assign(tmp,alloc_method(type_info<T>,size)))gc_for_alloc();
7119 return reinterpret_cast<T*
>(tmp);
7120 }
else return null_ptr;
7158 template_error(
"You cannot perform array operations on never_in_array type.");
7163 while(!realloc_method(ptr,nsize))gc_for_alloc();
7165 ptr=alloc<T>(nsize);
7173 base_call(ptr,nsize);
7187 template<
typename T>
7188 static constexpr bool able=
true;
7189 template<
typename T>
7190 static constexpr bool nothrow=
noexcept(get_size_of_alloc_method(
declvalue(
const T*)));
7192 template<
typename T>
requires able<T>
7197 return get_size_of_alloc_method(arg);
7200 template<
typename T>
requires able<T>
7202 return base_call(arg);
7204 }get_size_of_alloc{};
7209 template<
typename T>
7210 static constexpr bool able=
true;
7211 template<
typename T>
7214 template<
typename T>
requires able<T>
7220 template<
typename T>
requires able<T>
7222 return base_call(arg);
7229 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/_body.hpp"
7230 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/_export.hpp"
7239 #define export using alloc_n::
7243 export get_size_of_alloc;
7249 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/_body.hpp"
7250 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
7251 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/_test.hpp"
7260 inline void check_memory_lack()noexcept{
7261 stest_mapeventlogwith(
lambda(
const void*p,steventlist*a)
noexcept{
7262 stest_putsf(L
"内存泄露于%p,分配自:",p);
7263 stest_printeventlist(stdout,stest_copyeventlist(a));
7269 #if defined(ELC_TEST_ON)
7277 srand((
unsigned int)time(
nullptr));
7278 for(
int i=rand()%100+40;i--;){
7279 int*p=alloc<int>(50);
7286 stest_accert(p[19]==666);
7287 stest_accert(p[0]==72);
7290 check_memory_lack();
7292 inline void test_log_out(){
7294 inline void test_end(){
7302 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/_body.hpp"
7307 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/_body.hpp"
7308 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/get/_body.hpp"
7317 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/get/defs.hpp"
7326 namespace abstract_base_n{
7342 template<
typename T>
7344 realloc(arg,to_size);
7347 template<
typename T>
7350 realloc(arg,to_size);
7352 T*tmp=alloc<T>(to_size);
7353 auto from_size=get_size_of_alloc(arg);
7354 if constexpr(!move.
nothrow<T>){
7355 template_warning(
"the move of T was not noexcept,this may cause memory lack.");
7357 move[from_size](note::from(arg),note::to(tmp));
7363 move[from_size](note::from(arg),note::to(tmp));
7370 template<
typename T>
7372 const auto from_size=get_size_of_alloc(arg);
7373 const auto to_size=from_size+insert_size;
7374 const auto size_before_insert=insert_pos;
7375 const auto size_after_insert=from_size-insert_pos;
7376 if constexpr(move.
trivial<T>){
7377 realloc(arg,to_size);
7378 memmove(arg+size_before_insert+insert_size,arg+size_before_insert,size_after_insert*
sizeof(T));
7381 T*tmp=alloc<T>(to_size);
7382 if constexpr(!move.
nothrow<T>){
7383 template_warning(
"the move of T was not noexcept,this may cause memory lack.");
7385 move[size_before_insert](note::from(arg),note::to(tmp));
7386 move[size_after_insert](note::from(arg+insert_pos),note::to(tmp+insert_pos+insert_size));
7392 move[size_before_insert](note::from(arg),note::to(tmp));
7393 move[size_after_insert](note::from(arg+insert_pos),note::to(tmp+insert_pos+insert_size));
7404 template<
typename T>
7406 const auto from_size=get_size_of_alloc(arg);
7407 const auto size_before_insert=insert_pos;
7408 const auto size_after_insert=from_size-insert_pos;
7409 if constexpr(move.
trivial<T>){
7410 realloc(arg,to_size);
7411 memmove(arg+size_before_insert+insert_size,arg+size_before_insert,size_after_insert*
sizeof(T));
7414 T*tmp=alloc<T>(to_size);
7415 if constexpr(!move.
nothrow<T>){
7416 template_warning(
"the move of T was not noexcept,this may cause memory lack.");
7418 move[size_before_insert](note::from(arg),note::to(tmp));
7419 move[size_after_insert](note::from(arg+insert_pos),note::to(tmp+insert_pos+insert_size));
7425 move[size_before_insert](note::from(arg),note::to(tmp));
7426 move[size_after_insert](note::from(arg+insert_pos),note::to(tmp+insert_pos+insert_size));
7431 return to_size-from_size-insert_size;
7434 template<
typename T>
7436 const auto from_size=get_size_of_alloc(arg);
7437 const auto cut_size=from_size-to_size;
7438 if constexpr(move.
trivial<T>){
7439 ::std::memmove(arg,
add_const(arg+cut_size),to_size*
sizeof(T));
7440 realloc(arg,to_size);
7443 T*tmp=alloc<T>(to_size);
7444 if constexpr(!move.
nothrow<T>){
7445 template_warning(
"the move of T was not noexcept,this may cause memory lack.");
7447 move[to_size](note::from(arg+cut_size),note::to(tmp));
7453 move[to_size](note::from(arg+cut_size),note::to(tmp));
7460 template<
typename T>
7462 const auto from_size=get_size_of_alloc(arg);
7463 const auto grow_size=to_size-from_size;
7464 if constexpr(move.
trivial<T>){
7465 realloc(arg,to_size);
7466 ::std::memmove(arg+grow_size,
add_const(arg),from_size*
sizeof(T));
7469 T*tmp=alloc<T>(to_size);
7470 if constexpr(!move.
nothrow<T>){
7471 template_warning(
"the move of T was not noexcept,this may cause memory lack.");
7473 move[from_size](note::from(arg),note::to(tmp+grow_size));
7479 move[from_size](note::from(arg),note::to(tmp+grow_size));
7490 template<
typename T>
7492 const auto from_size=get_size_of_alloc(arg);
7493 const auto grow_size=to_size-from_size;
7494 const auto before_grow_size=grow_size-insert_size;
7495 const auto size_before_insert=insert_pos;
7496 const auto size_after_insert=from_size-insert_pos;
7497 if constexpr(move.
trivial<T>){
7498 realloc(arg,to_size);
7499 const auto orogin_data_ptr=arg+before_grow_size;
7500 ::std::memmove(orogin_data_ptr+size_before_insert+insert_size,arg+size_before_insert,size_after_insert*
sizeof(T));
7501 ::std::memmove(orogin_data_ptr,arg,size_before_insert*
sizeof(T));
7504 T*tmp=alloc<T>(to_size);
7505 if constexpr(!move.
nothrow<T>){
7506 template_warning(
"the move of T was not noexcept,this may cause memory lack.");
7508 const auto orogin_data_ptr=tmp+before_grow_size;
7509 move[size_before_insert](note::from(arg),note::to(orogin_data_ptr));
7510 move[size_after_insert](note::from(arg+size_before_insert),note::to(orogin_data_ptr+size_before_insert+insert_size));
7516 const auto orogin_data_ptr=tmp+before_grow_size;
7517 move[size_before_insert](note::from(arg),note::to(orogin_data_ptr));
7518 move[size_after_insert](note::from(arg+size_before_insert),note::to(orogin_data_ptr+size_before_insert+insert_size));
7523 return before_grow_size;
7527 template<
typename T>
7530 template<
class...Args>
7531 static constexpr bool able=construct<T>.able<Args...>&&destruct.
able<T>;
7532 template<
class...Args>
7533 static constexpr bool nothrow=construct<T>.nothrow<Args...>;
7535 template<
class...Args>
requires able<Args...>
7536 [[nodiscard]]T*
operator()(Args&&...rest)
const noexcept(nothrow<Args...>){
7538 return construct<T>[alloc<T>()](forward<Args>(rest)...);
7543 template<
class...Args>
requires able<Args...>
7544 [[nodiscard]]T*
operator()(Args&&...rest)
const noexcept(nothrow<Args...>){
7547 template_error(
"You can\'t get an array for never_in_array type.");
7548 return construct<T>[alloc<T>(_size)][_size](forward<Args>(rest)...);
7554 template<
typename U>
7555 static constexpr bool able=copy_construct.
able<T>&&destruct.
able<T>&&is_array_like_for<T,U>;
7556 template<
typename U>
7557 static constexpr bool nothrow=copy_construct.
nothrow<T>;
7562 template_error(
"You can\'t get an array for never_in_array type.");
7564 auto aret=alloc<T>[size]();
7565 copy_construct[size](note::from(a.begin()),note::to(aret));
7571 template<
typename U>
7572 static constexpr bool able=copy_construct.
able<T>&&move.
able<T>&&is_array_like_for<T,U>;
7573 template<
typename U>
7579 auto from_size=get_size_of_alloc(ptr);
7580 auto a_size=a.size();
7582 copy_construct[a_size](note::from(a.begin()),note::to(ptr+from_size));
7588 auto from_size=get_size_of_alloc(ptr);
7590 copy_construct(note::from(&a),note::to(ptr+from_size));
7596 auto from_size=get_size_of_alloc(ptr);
7598 move_construct(note::from(&a),note::to(ptr+from_size));
7604 template<
typename U>
7605 static constexpr bool able=destruct.
able<T>&&move.
able<T>&&is_array_like_for<T,U>;
7606 template<
typename U>
7611 auto ptr=from.value;
7612 auto from_size=get_size_of_alloc(ptr);
7613 T*ptr_to_a=in_range(a,{ptr,note::size(from_size)});
7614 auto a_size=a.size();
7618 destruct[a_size](ptr_to_a);
7619 move[(ptr+from_size)-(ptr_to_a+a_size)](note::from(ptr_to_a+a_size),note::to(ptr_to_a));
7625 template<
typename T>
7630 template<
typename T>
7631 static constexpr bool able=destruct.
able<T>;
7632 template<
typename T>
7633 static constexpr bool nothrow=destruct.
nothrow<T>;
7635 template<
typename T>
requires able<T>
7640 #
if defined(_MSC_VER)
7641 [[gsl::suppress(f.6)]]
7643 attribute_ptr_cast<abstract_base>(a)->abstract_method_unget_this();
7645 if constexpr(!destruct.
nothrow<T>)
7646 template_warning(
"the destructer of T was not noexcept,this may cause memory lack.");
7650 destruct[get_size_of_alloc(a)](a);
7656 template<
typename T>
requires able<T>
7657 void operator()(T*a,
decltype(destruct)::not_t)
const noexcept(nothrow<T>){
7664 template<
typename T>
7665 static constexpr bool able=construct<T>.
able<>&&destruct.
able<T>&&move.
able<T>;
7666 template<
typename T>
7669 template<
typename T>
requires able<T>
7670 static void base_call(T*&arg,
const size_t to_size)
noexcept(nothrow<T>){
7672 template_warning(
"For never_in_array type,get_resize will unget ptr when new_size=0 else do nothing.");
7678 arg=attribute_ptr_cast<abstract_base>(arg)->abstract_method_get_resize_this(to_size);
7680 const size_t from_size=get_size_of_alloc(arg);
7681 if(from_size==to_size)
7683 elseif(from_size > to_size){
7684 destruct[from_size-to_size](arg+to_size);
7688 construct<T>[arg+from_size][to_size-from_size]();
7690 arg=get<T>[to_size]();
7694 template<
typename T>
requires able<T>
7695 inline void operator()(T*&arg,
size_t to_size)
const noexcept(nothrow<T>){
7697 base_call(arg,to_size);
7699 template<
typename T>
requires able<T>
7700 [[nodiscard]]
inline T*
operator()(T*&&arg,
size_t to_size)
const noexcept(nothrow<T>){
7702 base_call(arg,to_size);
7707 template<
typename T>
7708 static constexpr bool able=get_resize_t::able<T>;
7709 template<
typename T>
7710 static constexpr bool nothrow=get_resize_t::nothrow<T>;
7711 template<
typename T>
requires(able<T> && construct<T>.able<>)
7712 void operator()(T*&arg,
size_t insert_pos,
size_t insert_size)
const noexcept(nothrow<T>){
7716 construct<T>[arg+insert_pos][insert_size]();
7719 template<
typename T>
requires(able<T> && copy_construct.
able<T>)
7720 void operator()(T*&arg,
size_t insert_pos,
size_t insert_size,
const T*insert_data)
const noexcept(nothrow<T>){
7724 copy_construct[insert_size](note::from(insert_data),note::to(arg+insert_pos));
7729 template<
typename T>
7730 static constexpr bool able=get_resize_t::able<T>;
7731 template<
typename T>
7732 static constexpr bool nothrow=get_resize_t::nothrow<T>;
7733 template<
typename T>
requires(able<T> && construct<T>.able<> && copy_construct.
able<T>)
7734 void operator()(T*&arg,
size_t insert_pos,
size_t insert_size,
const T*insert_data,
size_t to_size)
const noexcept(nothrow<T>){
7737 copy_construct[insert_size](note::from(insert_data),note::to(arg+insert_pos));
7738 construct<T>[arg+to_size-end_grow_size][end_grow_size]();
7740 }insert_with_resize{};
7744 template<
typename T>
7745 static constexpr bool able=construct<T>.
able<>&&destruct.
able<T>&&move.
able<T>;
7746 template<
typename T>
7749 template<
typename T>
requires able<T>
7750 static void base_call(T*&arg,
const size_t to_size)
noexcept(nothrow<T>){
7753 template_warning(
"For never_in_array type,get_forward_resize will unget ptr when new_size=0 else do nothing.");
7759 arg=attribute_ptr_cast<abstract_base>(arg)->abstract_method_get_forward_resize_this(to_size);
7761 const size_t from_size=get_size_of_alloc(arg);
7762 if(from_size==to_size)
7764 elseif(from_size > to_size){
7765 destruct[from_size-to_size](arg);
7769 construct<T>[arg][to_size-from_size]();
7771 arg=get<T>[to_size]();
7775 template<
typename T>
requires able<T>
7776 inline void operator()(T*&arg,
size_t to_size)
const noexcept(nothrow<T>){
7777 base_call(arg,to_size);
7779 template<
typename T>
requires able<T>
7780 [[nodiscard]]
inline T*
operator()(T*&&arg,
size_t to_size)
const noexcept(nothrow<T>){
7781 base_call(arg,to_size);
7786 template<
typename T>
7787 static constexpr bool able=get_resize_t::able<T>;
7788 template<
typename T>
7789 static constexpr bool nothrow=get_resize_t::nothrow<T>;
7790 template<
typename T>
requires(able<T> && construct<T>.able<>)
7791 void operator()(T*&arg,
size_t insert_pos,
size_t insert_size)
const noexcept(nothrow<T>){
7795 template<
typename T>
requires(able<T> && copy_construct.
able<T>)
7796 void operator()(T*&arg,
size_t insert_pos,
size_t insert_size,
const T*insert_data)
const noexcept(nothrow<T>){
7802 template<
typename T>
7803 static constexpr bool able=get_resize_t::able<T>;
7804 template<
typename T>
7805 static constexpr bool nothrow=get_resize_t::nothrow<T>;
7806 template<
typename T>
requires(able<T> && construct<T>.able<> && copy_construct.
able<T>)
7807 void operator()(T*&arg,
size_t insert_pos,
size_t insert_size,
const T*insert_data,
size_t to_size)
const noexcept(nothrow<T>){
7811 const auto orogin_arg=arg+before_grow_size;
7812 copy_construct[insert_size](note::from(insert_data),note::to(orogin_arg+insert_pos));
7813 construct<T>[arg][before_grow_size]();
7816 }insert_with_resize{};
7817 }get_forward_resize{};
7820 template<
typename T>
7821 static constexpr bool able=
true;
7822 template<
typename T>
7823 static constexpr bool nothrow=
noexcept(get_size_of_alloc(
declvalue(
const T*)));
7825 template<
typename T>
requires able<T>
7828 return get_size_of_alloc(arg);
7831 template<
typename T>
requires able<T>
7833 return base_call(arg);
7838 template<
typename T>
7840 template<
typename T>
7841 static constexpr bool nothrow=copy_construct.
nothrow<T>;
7843 template<
typename T>
requires able<T>
7847 return remove_const(attribute_ptr_cast<abstract_base>(arg))->abstract_method_copy_get_this();
7849 return copy_construct(note::from(arg),note::to(copy_alloc(arg)),
get_size_of_get(arg));
7852 template<
typename T>
requires able<T>
7854 return base_call(arg);
7861 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/get/_body.hpp"
7862 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/get/_export.hpp"
7871 #define export using get_n::
7874 export get_forward_resize;
7883 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/get/_body.hpp"
7884 #if defined(ELC_TEST_ON)
7885 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/get/_test.hpp"
7899 ste::tester::setzero();
7900 tester*p=get<tester>[50]();
7901 stest_accert(tester::getbuildtime()==50);
7904 stest_accert(tester::getdestroytime()==50);
7905 stest_accert(tester::getbuildtime()==60);
7910 stest_accert(tester::getcalltime()==60);
7913 stest_accert(tester::getdestroytime()==110);
7915 check_memory_lack();
7917 inline void test_log_out(){
7919 inline void test_end(){
7926 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/get/_body.hpp"
7931 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/_body.hpp"
7932 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/_body.hpp"
7942 namespace abstract_base_n{
7951 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/pointer_off_set.hpp"
7968 #line 19 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/_body.hpp"
7969 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/abstract_base_vtable.hpp"
7987 friend class get_n::unget_t;
7988 friend class get_n::get_resize_t;
7989 friend class get_n::get_size_of_get_t;
7990 friend class get_n::copy_get_t;
7995 #line 20 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/_body.hpp"
7996 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/abstract_base.hpp"
8007 T* abstract_method_copy_get_this(){
8011 T* abstract_method_get_resize_this(
size_t size){
8015 T* abstract_method_get_forward_resize_this(
size_t size){
8017 return reinterpret_cast<T*
>(
get_ptr_after_off_set(this->_abstract_method_get_forward_resize_this(size)));
8028 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/_body.hpp"
8029 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/instance_struct.hpp"
8044 if constexpr(copy_get.
able<T>){
8053 if constexpr(get_resize.
able<T>){
8062 if constexpr(get_forward_resize.
able<T>){
8064 return get_forward_resize(
get_handle(
this),size);
8076 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/_body.hpp"
8078 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/_export.hpp"
8087 #define export using abstract_base_n::
8094 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/_body.hpp"
8098 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/_body.hpp"
8102 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/_body.hpp"
8111 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/defs.hpp"
8121 template<
typename T>
8126 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/_body.hpp"
8135 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/ref_t.hpp"
8150 constexpr inline void add_ref()const noexcept{_ref_num++;}
8151 [[nodiscard]]
inline bool cut_ref()const noexcept{
return!--_ref_num;}
8160 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/_body.hpp"
8161 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/ref_base.hpp"
8171 template<
typename T>
8176 template_error(
"this function should not be instantiated,please overload the function the_waiting_for_destroy in the namespace where this type is defined.");
8179 template<
typename T>
8186 template_error(
"please overload the function the_destroy_and_free in the namespace where this type is defined.");
8192 template<
typename T>
8194 template<
typename T>
8197 template<
typename T>
8199 if constexpr(!was_ref_able<T>)
8201 return attribute_ptr_cast<const ref_able>(a)->link_num();
8203 template<
typename T>
8205 if constexpr(!was_weak_ref_able<T>)
8207 return attribute_ptr_cast<const weak_ref_able>(a)->link_num();
8212 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/_body.hpp"
8213 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/ref_able.hpp"
8222 template<
typename T>
8227 using base_t::base_t;
8230 if(base_t::cut_ref())
8231 if constexpr(was_weak_ref_able<T>)
8243 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/_body.hpp"
8244 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/weak_ref_able.hpp"
8253 template<
typename T>
8259 if constexpr(!was_ref_able<T>)
8260 template_error(
"base on ref_able before base on weak_ref_able,please.");
8262 if(base_t::cut_ref())
8270 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/_body.hpp"
8274 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/defs.hpp"
8275 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/_body.hpp"
8284 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/base_ptr_t.hpp"
8301 [[nodiscard]]T*
get()const noexcept{
return _to;}
8303 template<
class T,
typename ref_type>
8311 static constexpr bool cut_nothrow=
noexcept(
declvalue(ref_type).cut_ref());
8313 static void cut_ref(T*a)
noexcept(cut_nothrow){attribute_ptr_cast<ref_type>(a)->cut_ref();}
8314 static void add_ref(T*a)
noexcept{attribute_ptr_cast<ref_type>(a)->add_ref();}
8320 template<
class T,
typename ref_type>
8325 template<
class T,
typename ref_type,
bool do_replace_check>
8332 using base_t::cut_nothrow;
8333 using same_ref::add_ref;
8334 using same_ref::cut_ref;
8335 using same_ref::swap_with;
8336 using same_ptr::_to;
8341 if constexpr(type_info<T>.has_attribute(
weak_ref_able) && type_info<ref_type> == type_info<ref_able<remove_cv<T>>>)
8345 add_ref(_to=null_ptr);
8372 static constexpr bool reset_nothrow=cut_nothrow;
8373 void reset(T*a)
const noexcept(reset_nothrow){
auto tmp=_to;add_ref(_to=a);cut_ref(tmp);}
8376 static constexpr bool replace_check_nothrow=(type_info<T>.not_has_attribute(
replace_able))||reset_nothrow;
8378 if constexpr(do_replace_check&&type_info<remove_cvref<T>>.has_attribute(
replace_able))
8379 if(attribute_ptr_cast<replace_able>(_to)->replaced())
8380 reset(attribute_ptr_cast<replace_able>(_to)->get_ptr());
8382 inline void do_replace(T*p)
noexcept(replace_check_nothrow&&reset_nothrow){
8383 if constexpr(type_info<remove_cvref<T>>.has_attribute(
replace_able)){
8384 attribute_ptr_cast<replace_able>(_to)->be_replace_as(p);
8388 template<
typename ref_type_,
bool do_replace_check_>
8390 do_replace(p.get());
8392 static constexpr bool get_nothrow=replace_check_nothrow;
8393 [[nodiscard]]T*
get()const noexcept(get_nothrow){
8395 return base_t::get();
8397 [[nodiscard]]
bool unique()const noexcept{
return attribute_ptr_cast<ref_able>(get())->link_num()==1;}
8398 [[nodiscard]]
constexpr
8401 using elc::defs::hash;
8414 template<
typename ref_type_,
bool do_replace_check_>
8422 template<
typename ref_type_,
bool do_replace_check_>
requires(type_info<remove_cv<T>>!=type_info<T>)
8430 template<
typename ref_type_,
bool do_replace_check_>
requires(type_info<remove_cv<T>>!=type_info<T>)
8440 template<
typename T_,
typename T,
typename ref_type,
bool do_replace_check,enable_if(type_info<T_>.base_on<T>)>
8442 return b.operator==(
static_cast<const T*
>(a));
8445 template<
typename T,
typename T_>
requires(
equal.
able<T,T_>)
8450 template<
class T,
typename ref_type,
bool do_replace_check>
8452 static_assert(type_info<T>.base_on<ref_type>);
8457 using base_t::reset;
8459 using same_ref::swap_with;
8460 using same_ptr::_to;
8462 using base_t::get_nothrow;
8463 using base_t::reset_nothrow;
8470 [[nodiscard]]T*
operator->()const noexcept(get_nothrow){
return get();}
8471 [[nodiscard]]T&
operator*()const noexcept(get_nothrow){
return*get();}
8472 [[nodiscard]]
explicit operator bool()const noexcept(get_nothrow){
return bool(
pointer_to_bool(get()));}
8474 [[nodiscard]]
explicit operator T*()
const noexcept(get_nothrow){
return get();}
8485 static inline thread_local class for_delete_t{
8487 friend class this_t;
8488 for_delete_t*operator()(T*a)
noexcept{
8494 destroy(
reinterpret_cast<for_delete_t*
>(a)->
_m);
8498 [[nodiscard]]
explicit operator bool()noexcept(get_nothrow){
return add_const(
this)->operator bool();}
8499 [[nodiscard]]
distinctive operator for_delete_t*()
noexcept(get_nothrow){
return for_delete(get());}
8501 template<
typename...Args>
requires(invoke<T>.able<Args...>)
8502 inline auto operator()(Args&&... rest)
noexcept(invoke<T>.nothrow<Args...>){
return(
operator*())(forward<Args>(rest)...);}
8507 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/_body.hpp"
8508 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/comn_ptr_t.hpp"
8517 template<
typename T>
8522 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/_body.hpp"
8523 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/weak_ptr_t.hpp"
8532 template<
typename T>
8537 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/_body.hpp"
8538 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/nocheck_ptr_t.hpp"
8547 template<
typename T>
8552 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/_body.hpp"
8553 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/deduction_guides.hpp"
8562 template<
class T,common_attribute_t ref_type,
bool has_check>
8565 template<
class T,common_attribute_t ref_type,
bool has_check>
8570 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/_body.hpp"
8574 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/defs.hpp"
8579 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/_body.hpp"
8580 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/_export.hpp"
8589 #define export using ptr_n::
8599 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/_body.hpp"
8600 #if defined(ELC_TEST_ON)
8601 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/_test.hpp"
8612 with_common_attribute<ref_able,weak_ref_able,never_in_array>,
build_by_get_only{};
8613 void waiting_for_destroy(tester*)
noexcept{}
8617 comn_ptr_t a=get<tester>();
8620 check_memory_lack();
8622 inline void test_log_out(){
8624 inline void test_end(){
8630 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/_body.hpp"
8635 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/_body.hpp"
8637 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/other/_body.hpp"
8647 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/other/replace_able.hpp"
8657 template<
typename T>
8665 attribute_ptr_cast<ref_able>(
_m)->cut_ref();
8672 return attribute_ptr_cast<replace_able>(
_m)->get_ptr();
8676 attribute_ptr_cast<ref_able>(
_m)->cut_ref();
8679 attribute_ptr_cast<ref_able>(
_m)->add_ref();
8686 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/other/_body.hpp"
8688 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/other/can_map_all.hpp"
8697 template<
typename T>
8703 template<
class,
class func_t>
8707 type_list.add(
this);
8710 template<
class T,
class func_t>
8715 a(get_handle<T,can_map_all>(tmp++));
8718 #define expr declvalue(func_t)(declvalue(T*))
8719 template<
class T,
class func_t,enable_if(was_not_an_ill_form(expr))>
8721 map_all_helper<T,func_t>(forward<func_t>(a));
8727 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/other/_body.hpp"
8732 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/_body.hpp"
8736 #if defined(ELC_TEST_ON)
8737 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/_test.hpp"
8753 inline void test_log_out(){
8754 alloc_n::test_log_out();
8755 lifetime_n::test_log_out();
8756 get_n::test_log_out();
8759 inline void test_end(){
8760 alloc_n::test_end();
8761 lifetime_n::test_end();
8768 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/_body.hpp"
8773 #line 30 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
8775 using namespace memory;
8777 namespace container{
8778 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/_body.hpp"
8787 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/_body.hpp"
8796 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/defs.hpp"
8806 template<
typename T>
8810 #if defined(DEBUG) || defined(_DEBUG)
8811 size_t _size_for_debug_view=0;
8814 #if defined(DEBUG) || defined(_DEBUG)
8816 constexpr array_t(T*a,
size_t s):
_m(a),_size_for_debug_view(s){}
8822 [[nodiscard]]
this_t copy()
const noexcept(copy_get.
nothrow<T>)
requires(copy_get.
able<T>){
8823 #if defined(DEBUG) || defined(_DEBUG)
8824 return{copy_get(
_m),_size_for_debug_view};
8826 return{copy_get(
_m)};
8832 #if defined(DEBUG) || defined(_DEBUG)
8833 swap(_size_for_debug_view,a._size_for_debug_view);
8843 _m=get<T>[size.value]();
8844 #if defined(DEBUG) || defined(_DEBUG)
8845 _size_for_debug_view=size.value;
8849 _m=get<T>[size.value](elem);
8850 #if defined(DEBUG) || defined(_DEBUG)
8851 _size_for_debug_view=size.value;
8858 template<
class U>
requires(get<T>.as_array.able<U>)
8859 array_t(U&&a)
noexcept(get<T>.as_array.nothrow<U>){
8860 _m=get<T>.as_array(forward<U>(a));
8861 #if defined(DEBUG) || defined(_DEBUG)
8862 _size_for_debug_view=size();
8869 return operator=(a.copy());
8880 [[nodiscard]]
size_t size()const noexcept{
8881 return get_size_of_get(
_m);
8884 return size()*
sizeof(T);
8886 static constexpr bool resize_nothrow = get_resize.
nothrow<T>;
8887 void resize(
size_t size)
noexcept(resize_nothrow){
8888 get_resize(
_m,size);
8889 #if defined(DEBUG) || defined(_DEBUG)
8890 _size_for_debug_view=size;
8893 static constexpr bool forward_resize_nothrow = get_forward_resize.
nothrow<T>;
8895 get_forward_resize(
_m,size);
8896 #if defined(DEBUG) || defined(_DEBUG)
8897 _size_for_debug_view=size;
8901 void insert(
size_t index,
size_t count)
noexcept(insert_nothrow){
8903 #if defined(DEBUG) || defined(_DEBUG)
8904 _size_for_debug_view+=count;
8907 void insert(
size_t index,
size_t count,
const T*data)
noexcept(insert_nothrow){
8908 get_resize.
insert(
_m,index,count,data);
8909 #if defined(DEBUG) || defined(_DEBUG)
8910 _size_for_debug_view+=count;
8915 #if defined(DEBUG) || defined(_DEBUG)
8916 _size_for_debug_view=new_size;
8922 #if defined(DEBUG) || defined(_DEBUG)
8923 _size_for_debug_view=new_size;
8927 return _m==null_ptr;
8934 [[nodiscard]]
explicit operator hash_t()const noexcept(
hash.nothrow<T>){
return hash(
_m,size());}
8935 [[nodiscard]]
explicit operator T*()
noexcept{
return _m;}
8936 [[nodiscard]]
explicit operator const T*()
const noexcept{
return _m;}
8948 return get_iterator_at(
zero);
8951 return get_iterator_at(size());
8954 return get_iterator_at(
zero);
8957 return get_iterator_at(size());
8979 #define expr declvalue(func_t)(declvalue(T&))
8984 func((*
this)[asize]);
8988 #define expr declvalue(func_t)(declvalue(const T&))
8993 func((*
this)[asize]);
8998 get<T>.apply_end(note::to<T*&>(
_m),a);
8999 #if defined(DEBUG) || defined(_DEBUG)
9000 _size_for_debug_view=size();
9004 get<T>.apply_end(note::to<T*&>(
_m),move(a));
9005 #if defined(DEBUG) || defined(_DEBUG)
9006 _size_for_debug_view=size();
9010 get<T>.remove(a,note::from(
_m));
9011 #if defined(DEBUG) || defined(_DEBUG)
9012 _size_for_debug_view=size();
9016 template<
class U,enable_if(get<T>.apply_end.able)>
9018 get<T>.apply_end(note::to(a._m),b);
9024 template<
typename U>
9028 template<
typename U>
9033 template<
typename U>
9039 template<
typename U>
9041 return in_range(*
this,a);
9043 template<
typename U>
9045 return in_range(*
this,a);
9048 template<
typename T>
9056 [[nodiscard]]
inline auto begin_of_array_like(
const array_t<
remove_cv<T>>&a)
noexcept{
return(
const T*)a.begin();}
9061 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/_body.hpp"
9062 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/deduction_guides.hpp"
9072 template <
class T,
class...U>
9080 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/_body.hpp"
9081 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/_export.hpp"
9090 #define export using array_n::
9096 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/_body.hpp"
9097 #if defined(ELC_TEST_ON)
9098 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/_test.hpp"
9112 array_t<int>anarray;
9113 stest_accert(anarray.size()==0);
9115 stest_accert(anarray.size()==5);
9117 stest_accert(anarray[2]==99);
9119 stest_accert(anarray[2]==99);
9121 swap(anarray,anarray);
9123 check_memory_lack();
9125 inline void test_log_out(){
9127 inline void test_end(){
9134 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/_body.hpp"
9139 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/_body.hpp"
9140 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/_body.hpp"
9149 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/base_function_t.hpp"
9158 namespace function_n{
9161 template<
class Ret_t,
class...Args_t>
9170 [[nodiscard]]virtual const
void*get_data_begin()const noexcept=0;
9171 [[nodiscard]]virtual
bool equal_with(const
void*)const=0;
9172 [[noreturn]] virtual
void throw_self_ptr()const=0;
9173 [[noreturn]] virtual
void throw_self_ptr()=0;
9174 [[nodiscard]]
bool operator==(const
this_t&a)
const{
9175 return this->get_type_info()==a.get_type_info()&&this->equal_with(a.get_data_begin());
9177 template<
typename T>
9179 return this->get_type_info()==type_info<T>&&this->equal_with(addressof(a));
9181 typedef Ret_t(*func_ptr_t)(Args_t...);
9185 template<
class T,
class Func_t>
9187 template<
class T,
class Ret_t,
class...Args_t>
9190 base_func_data_t<Ret_t(Args_t...)>,function_data_warpper_t<T,Ret_t(Args_t...)>{
9191 static_assert(!::std::is_function_v<T>);
9194 typedef function_data_warpper_t<T,Ret_t(Args_t...)>
data_t;
9200 using data_t::data_t;
9203 [[nodiscard]]
virtual const void*
get_data_begin()const noexcept override final{
return addressof(data_t::get_data());}
9204 [[noreturn]]
virtual void throw_self_ptr()const override final{
throw addressof(data_t::get_data());}
9205 [[noreturn]]
virtual void throw_self_ptr()override final{
throw addressof(data_t::get_data());}
9208 return data_t::get_data()==*
remove_const(
reinterpret_cast<const T*
>(a));
9212 [[nodiscard]]
virtual Ret_t
call(Args_t...args)noexcept(invoke<T>.nothrow<Args_t...>)override final{
9213 return data_t::operator()(forward<Args_t>(args)...);
9218 if constexpr(type_info<const T>.can_convert_to<
func_ptr_t>)
9219 return static_cast<func_ptr_t>(data_t::get_data());
9227 template<
class Ret_t,
class...Args_t>
9235 [[nodiscard]]
virtual const void*
get_data_begin()const noexcept override final{
return null_ptr;}
9236 [[noreturn]]
virtual void throw_self_ptr()const override final{
throw(
const void*)null_ptr;}
9238 [[nodiscard]]
virtual bool equal_with(
const void*)
const noexcept override final{
return true;}
9240 template<
class Ret_t,
class...Args_t>
9243 template<
class Ret_t,
class...Args_t>
9250 template<
class Ret_t,
class...Args_t>
9264 return *
_m==*(a.
_m);
9266 template<
typename T>
requires(
equal.
able<base_t_w,T>)
9270 template<
typename T>
9273 _m->throw_self_ptr();
9278 catch(
const void*){}
9281 template<
typename T>
9284 _m->throw_self_ptr();
9294 Ret_t
call(Args_t&&...rest)
const{
return _m->call(forward<Args_t>(rest)...);}
9297 #if !defined(_MSC_VER)
9298 template<
class T,
bool promise_nothrow_at_destruct>
9300 template<
class Ret_t,
class...Args_t,
bool nothrow,
bool promise_nothrow_at_destruct>
9306 template<class,
bool>
9312 typedef Ret_t(*func_ptr_t)(Args_t...)noexcept(nothrow);
9318 static constexpr
bool base_on_this_t_or_more_stringent_restrictions=(
9319 type_info<T>.base_on<
this_t>||
9320 type_info<T>.base_on<
base_function_t<Ret_t(Args_t...)noexcept(
bool(nothrow+1)), promise_nothrow_at_destruct >>||
9321 type_info<T>.base_on<
base_function_t<Ret_t(Args_t...)noexcept(nothrow),
bool(promise_nothrow_at_destruct+1) >>||
9322 type_info<T>.base_on<
base_function_t<Ret_t(Args_t...)noexcept(
bool(nothrow+1)),
bool(promise_nothrow_at_destruct+1) >>
9326 static constexpr
bool get_data_able=invoke<T>.able<Args_t...> && not base_on_this_t_or_more_stringent_restrictions<T>;
9331 static
ptr_t get_data_from(T&&a)noexcept(get_data_nothrow<T>){
9333 if constexpr(promise_nothrow_at_destruct and not destruct.
nothrow<T>)
9335 if constexpr(nothrow)
9336 if constexpr(!invoke<T>.nothrow<Args_t...>)
9337 template_warning(
"the call of T was not noexcept,this may cause terminate.");
9339 return get<func_data_t<remove_cvref<T>>>(a);
9344 base_t::swap_with(a);
9348 template<class T> requires base_on_this_t_or_more_stringent_restrictions<T>
9356 template<
class T>
requires(get_data_able<T>)
9358 _m=get_data_from(forward<T>(a));
9361 _m=get<func_data_t<func_ptr_t>>(a);
9365 this_t&operator=(const
this_t&a)&noexcept(promise_nothrow_at_destruct)=default;
9369 template<
class T>
requires base_on_this_t_or_more_stringent_restrictions<T>
9371 base_t::operator=(a);
9374 template<
class T>
requires(get_data_able<T>)
9375 this_t&
operator=(T&&a)
noexcept(get_data_nothrow<T> && promise_nothrow_at_destruct){
9376 _m=get_data_from(forward<T>(a));
9382 [[nodiscard]]
explicit operator bool()const noexcept{
9388 return base_t::call(forward<Args_t>(args)...);
9393 static thread_local inline base_t::base_t_w* _func_ptr_data_local=
nullptr;
9394 static inline ::std::atomic<
decltype(_func_ptr_data_local)> _func_ptr_data_gobal=
nullptr;
9395 static Ret_t _func_ptr_value(Args_t...args)noexcept{
9396 if(!_func_ptr_data_local)
9397 _func_ptr_data_local=_func_ptr_data_gobal.load(::std::memory_order_relaxed);
9398 return _func_ptr_data_local->call(forward<Args_t>(args)...);
9404 [[nodiscard]]
explicit operator func_ptr_t()const noexcept(promise_nothrow_at_destruct){
9405 func_ptr_t a=(func_ptr_t)
_m->get_func_ptr();
9407 _func_ptr_data_local=base_t::_m.get();
9408 _func_ptr_data_gobal.store(_func_ptr_data_local,::std::memory_order_relaxed);
9409 return _func_ptr_value;
9414 template<
class T,
bool promise_nothrow_at_destruct>
9415 class base_function_t;
9416 template<
class Ret_t,
class...Args_t,
bool promise_nothrow_at_destruct>
9417 struct base_function_t<Ret_t(Args_t...),promise_nothrow_at_destruct>:function_data_saver_t<Ret_t(Args_t...)>{
9419 typedef function_data_saver_t<Ret_t(Args_t...)>base_t;
9420 typedef base_function_t<Ret_t(Args_t...),promise_nothrow_at_destruct>this_t;
9422 template<
class,
bool>
9423 friend class base_function_t;
9428 typedef Ret_t(*func_ptr_t)(Args_t...);
9430 using base_t::ptr_t;
9434 static constexpr bool base_on_this_t_or_more_stringent_restrictions=(
9435 type_info<T>.base_on<this_t>||
9436 type_info<T>.base_on<base_function_t<Ret_t(Args_t...)noexcept, promise_nothrow_at_destruct >>||
9437 type_info<T>.base_on<base_function_t<Ret_t(Args_t...),
bool(promise_nothrow_at_destruct+1) >>||
9438 type_info<T>.base_on<base_function_t<Ret_t(Args_t...)noexcept,
bool(promise_nothrow_at_destruct+1) >>
9442 static constexpr
bool get_data_able=invoke<T>.able<Args_t...> && not base_on_this_t_or_more_stringent_restrictions<T>;
9444 static constexpr
bool get_data_nothrow=get<func_data_t<
remove_cvref<T>>>.nothrow<T>;
9446 template<class T> requires(get_data_able<T> && get<func_data_t<
remove_cvref<T>>>.able<T>)
9447 static auto get_data_from(T&&a)noexcept(get_data_nothrow<T>){
9449 if constexpr(promise_nothrow_at_destruct and not destruct.
nothrow<T>)
9452 return get<func_data_t<remove_cvref<T>>>(a);
9454 explicit base_function_t(base_t::ptr_t a)
noexcept{
_m=a;}
9456 void swap_with(this_t&a)
noexcept{
9457 base_t::swap_with(a);
9460 base_function_t()noexcept=default;
9461 template<class T> requires base_on_this_t_or_more_stringent_restrictions<T>
9462 base_function_t(const T&a)noexcept:base_t(a){}
9469 template<
class T>
requires(get_data_able<T>)
9471 _m=get_data_from(forward<T>(a));
9474 _m=get<func_data_t<func_ptr_t>>(a);
9476 ~base_function_t()noexcept(promise_nothrow_at_destruct)=default;
9478 this_t&operator=(const this_t&a)noexcept(promise_nothrow_at_destruct)=default;
9479 this_t&operator=(this_t&&a)noexcept(promise_nothrow_at_destruct)=default;
9480 this_t&operator=(null_ptr_t)noexcept(promise_nothrow_at_destruct){
_m=
null_ptr;
return *
this;}
9481 this_t&operator=(nullptr_t)
noexcept(promise_nothrow_at_destruct){
return *
this=
null_ptr;}
9482 template<
class T>
requires base_on_this_t_or_more_stringent_restrictions<T>
9483 this_t&operator=(
const T&a)&
noexcept(promise_nothrow_at_destruct){
9484 base_t::operator=(a);
9487 template<
class T>
requires(get_data_able<T>)
9488 this_t&
operator=(T&&a)
noexcept(get_data_nothrow<T> && promise_nothrow_at_destruct){
9489 _m=get_data_from(forward<T>(a));
9493 this_t deep_copy(){
return this_t{
copy_get(
_m.get())};}
9495 [[nodiscard]]
explicit operator bool()const noexcept{
9499 Ret_t operator()(Args_t...args){
9500 return base_t::call(forward<Args_t>(args)...);
9502 Ret_t operator()(Args_t...args)
const{
9503 return base_t::call(forward<Args_t>(args)...);
9508 static thread_local inline base_t::base_t_w* _func_ptr_data_local=
nullptr;
9509 static inline ::std::atomic<
decltype(_func_ptr_data_local)> _func_ptr_data_gobal=
nullptr;
9510 static Ret_t _func_ptr_value(Args_t...args)noexcept{
9511 if(!_func_ptr_data_local)
9512 _func_ptr_data_local=_func_ptr_data_gobal.load(::std::memory_order_relaxed);
9513 return _func_ptr_data_local->call(forward<Args_t>(args)...);
9519 [[nodiscard]]
explicit operator func_ptr_t()const noexcept(promise_nothrow_at_destruct){
9520 func_ptr_t a=(func_ptr_t)
_m->get_func_ptr();
9522 _func_ptr_data_local=base_t::_m.get();
9523 _func_ptr_data_gobal.store(_func_ptr_data_local,::std::memory_order_relaxed);
9524 return _func_ptr_value;
9527 template<
class Ret_t,
class...Args_t,
bool promise_nothrow_at_destruct>
9528 struct base_function_t<Ret_t(Args_t...)noexcept,promise_nothrow_at_destruct>:function_data_saver_t<Ret_t(Args_t...)>{
9530 typedef function_data_saver_t<Ret_t(Args_t...)>base_t;
9531 typedef base_function_t<Ret_t(Args_t...)noexcept,promise_nothrow_at_destruct>this_t;
9533 template<class,
bool>
9534 friend class base_function_t;
9537 using func_data_t=function_n::func_data_t<U,Ret_t(Args_t...)>;
9539 typedef Ret_t(*func_ptr_t)(Args_t...)noexcept;
9541 using base_t::ptr_t;
9545 static constexpr
bool base_on_this_t_or_more_stringent_restrictions=(
9546 type_info<T>.base_on<this_t>||
9547 type_info<T>.base_on<base_function_t<Ret_t(Args_t...)noexcept, promise_nothrow_at_destruct >>||
9548 type_info<T>.base_on<base_function_t<Ret_t(Args_t...)noexcept,
bool(promise_nothrow_at_destruct+1) >>
9552 static constexpr
bool get_data_able=invoke<T>.able<Args_t...> && not base_on_this_t_or_more_stringent_restrictions<T>;
9554 static constexpr
bool get_data_nothrow=get<func_data_t<remove_cvref<T>>>.nothrow<T>;
9556 template<class T> requires(get_data_able<T> && get<func_data_t<remove_cvref<T>>>.able<T>)
9557 static auto get_data_from(T&&a)noexcept(get_data_nothrow<T>){
9562 if constexpr(!invoke<T>.nothrow<Args_t...>)
9563 template_warning(
"the call of T was not noexcept,this may cause terminate.");
9565 return get<func_data_t<remove_cvref<T>>>(a);
9569 void swap_with(this_t&a)
noexcept{
9570 base_t::swap_with(a);
9574 template<class T> requires base_on_this_t_or_more_stringent_restrictions<T>
9575 base_function_t(const T&a)noexcept:base_t(a){}
9582 template<
class T>
requires(get_data_able<T>)
9584 _m=get_data_from(forward<T>(a));
9587 _m=get<func_data_t<func_ptr_t>>(a);
9589 ~base_function_t()noexcept(promise_nothrow_at_destruct)=default;
9591 this_t&operator=(const this_t&a)&noexcept(promise_nothrow_at_destruct)=default;
9592 this_t&operator=(this_t&&a)&noexcept(promise_nothrow_at_destruct)=default;
9593 this_t&operator=(null_ptr_t)&noexcept(promise_nothrow_at_destruct){
_m=
null_ptr;
return *
this;}
9594 this_t&operator=(nullptr_t)&
noexcept(promise_nothrow_at_destruct){
return *
this=
null_ptr;}
9595 template<
class T>
requires base_on_this_t_or_more_stringent_restrictions<T>
9596 this_t&operator=(
const T&a)&
noexcept(promise_nothrow_at_destruct){
9597 base_t::operator=(a);
9600 template<
class T>
requires(get_data_able<T>)
9601 this_t&
operator=(T&&a)
noexcept(get_data_nothrow<T> && promise_nothrow_at_destruct){
9602 _m=get_data_from(forward<T>(a));
9606 this_t deep_copy(){
return this_t{
copy_get(
_m.get())};}
9608 [[nodiscard]]
explicit operator bool()const noexcept{
9612 Ret_t operator()(Args_t...args)noexcept{
9614 return base_t::call(forward<Args_t>(args)...);
9616 Ret_t operator()(Args_t...args)const noexcept{
9618 return base_t::call(forward<Args_t>(args)...);
9623 static thread_local inline base_t::base_t_w* _func_ptr_data_local=
nullptr;
9624 static inline ::std::atomic<decltype(_func_ptr_data_local)> _func_ptr_data_gobal=
nullptr;
9625 static Ret_t _func_ptr_value(Args_t...args)noexcept{
9626 if(!_func_ptr_data_local)
9627 _func_ptr_data_local=_func_ptr_data_gobal.load(::std::memory_order_relaxed);
9628 return _func_ptr_data_local->call(forward<Args_t>(args)...);
9634 [[nodiscard]]
explicit operator func_ptr_t()const noexcept(promise_nothrow_at_destruct){
9635 func_ptr_t a=(func_ptr_t)
_m->get_func_ptr();
9637 _func_ptr_data_local=base_t::_m.get();
9638 _func_ptr_data_gobal.store(_func_ptr_data_local,::std::memory_order_relaxed);
9639 return _func_ptr_value;
9643 template<
class T,
bool promise_nothrow_at_destruct>
9651 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/_body.hpp"
9652 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/defs.hpp"
9661 namespace function_n{
9672 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/_body.hpp"
9673 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/deduction_guides.hpp"
9682 namespace function_n{
9683 template<
typename T,
typename Func_t=get_function_type<T>,
bool promise_nothrow_at_destruct>
9689 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/_body.hpp"
9690 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/_export.hpp"
9699 #define export using function_n::
9706 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/_body.hpp"
9707 #if defined(ELC_TEST_ON)
9708 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/_test.hpp"
9717 namespace function_n{
9723 #if !defined(_MSC_VER)
9726 function_t<
void()
noexcept>
9730 stest_accert(tester==0);
9732 stest_accert(tester==1);
9733 #if !defined(_MSC_VER)
9744 stest_accert(tester==0);
9746 stest_accert(tester==1);
9752 check_memory_lack();
9754 inline void test_log_out(){
9756 inline void test_end(){
9763 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/_body.hpp"
9768 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/_body.hpp"
9770 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/_body.hpp"
9780 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/base_stack.hpp"
9789 template<
typename T>
9818 swap(_size,a._size);
9828 return operator=(a.copy());
9834 while(
_m!=null_ptr){
9843 [[nodiscard]]
bool empty()const noexcept{
9844 return _m==null_ptr;
9846 template<
typename U>
9849 while(tmp!=null_ptr){
9860 return not in_stack(a);
9862 [[nodiscard]]
size_t size()const noexcept{
9867 void add(
const T&a)
noexcept(add_nothrow){
9868 _m=get<data_t>(a,
_m);
9873 template<
typename T_>
9876 while(tmp!=null_ptr){
9888 #define expr declvalue(func_t)(declvalue(T&))
9892 while(tmp!=null_ptr){
9899 #define expr declvalue(func_t)(declvalue(const T&))
9903 while(tmp!=null_ptr){
9932 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/_body.hpp"
9933 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/auto_stack.hpp"
9942 template<
typename T>
9951 using base_t::base_t;
9956 template<
typename U>
9959 while(tmp!=null_ptr){
9975 return not in_stack(a);
9981 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/_body.hpp"
9983 #if defined(ELC_TEST_ON)
9984 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/_test.hpp"
9997 stest_accert(a.size()==0);
10001 stest_accert(a.size()==3);
10003 stest_accert(a.size()==2);
10006 stest_accert(add_num==4);
10007 auto_stack_t<int>b=a;
10008 stest_accert(b.not_in_stack(2));
10010 stest_accert(a.in_stack(3));
10014 stest_accert(b.size()==0);
10016 check_memory_lack();
10018 inline void test_log_out(){
10020 inline void test_end(){
10025 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/_body.hpp"
10028 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/_export.hpp"
10037 #define export using stack_n::
10044 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/_body.hpp"
10048 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/_body.hpp"
10049 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/hash_table/_body.hpp"
10058 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/hash_table/defs.hpp"
10067 namespace hash_table_n{
10068 template<
typename T,
template<
typename>
class stack_t=auto_stack_t,
size_t bucket_max_size=256>
10071 typedef stack_t<T>bucket_t;
10079 [[nodiscard]]bucket_t&find_bucket(
hash_t a)
noexcept{
10080 return _m[a%
_m.size()];
10082 void bucket_count_grow()noexcept{
10083 this_t tmp(special_init,get_next_gold_size_to_resize_for_hash(
_m.size()));
10084 for(bucket_t&a:
_m){
10086 a.move_top_to(tmp.find_bucket(a.get_top_hash()));
10090 hash_table_t(
const base_t_w&a)
noexcept:
_m(a){}
10091 this_t copy()noexcept(copy_construct.nothrow<base_t_w>){
10114 template<
typename U>
10116 template<
typename U>
10119 void add(
const T&a)
noexcept(hash_nothrow<const T&>&&bucket_t::add_nothrow){
10120 auto&bucket=find_bucket(
hash(a));
10122 if(bucket.size() > bucket_max_size)
10123 bucket_count_grow();
10125 bool remove(
const T&a)
noexcept(bucket_t::remove_nothrow){
10126 auto&bucket=find_bucket(
hash(a));
10127 bool remove_success=bucket.remove(a);
10128 if constexpr(is_unstable_hash<T>)
10129 if(not remove_success){
10131 if(
is_eq(i,bucket))
10133 remove_success=i.remove(a);
10138 return remove_success;
10140 template<
typename U>
10142 auto&bucket=find_bucket(
hash(a));
10144 auto reference=bucket.find(a);
10145 if constexpr(is_unstable_hash<T>)
10146 if(reference.fail()){
10148 if(
is_eq(i,bucket))
10150 re_construct[&reference](i.find(a));
10151 if(reference.not_fail())
10158 return find(a).not_fail();
10161 return not in_table(a);
10166 for(
const bucket_t&a:
_m){
10173 re_construct(
this);
10176 #define expr declvalue(func_t)(declvalue(T&))
10179 for(bucket_t&a:
_m){
10185 #define expr declvalue(func_t)(declvalue(const T&))
10188 for(bucket_t&a:
_m){
10194 #define expr declvalue(func_t)(declvalue(bucket_t&))
10201 #define expr declvalue(func_t)(declvalue(const bucket_t&))
10208 template<
typename T,
template<
typename>
class stack_t,
size_t _,
size_t __>
10210 template<
typename T,
template<
typename>
class stack_t,
size_t _>
10212 template<
typename T,
template<
typename>
class stack_t,
size_t _>
10218 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/hash_table/_body.hpp"
10219 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/hash_table/_export.hpp"
10228 #define export using hash_table_n::
10234 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/hash_table/_body.hpp"
10235 #if defined(ELC_TEST_ON)
10236 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/hash_table/_test.hpp"
10245 namespace hash_table_n{
10247 inline void test(){
10252 check_memory_lack();
10254 inline void test_log_out(){
10256 inline void test_end(){
10263 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/hash_table/_body.hpp"
10268 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/_body.hpp"
10270 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/map/_body.hpp"
10279 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/map/defs.hpp"
10289 template<
typename T,
typename key_t,
template<
typename>
class stack_t=auto_stack_t,
size_t bucket_max_size=256>
10297 data_t(
const data_t&) =
default;
10298 data_t(
const key_t&a,
const T&b)
noexcept(copy_construct.
nothrow<key_t> && copy_construct.
nothrow<T>):_key(a),_value(b){}
10304 return bool(a._value==*
_m);
10309 return bool(_key==a);
10317 [[nodiscard]]
bool empty(){
10318 return _value==const_default_value_of<T>;
10321 typedef hash_table_t<data_t,stack_t,bucket_max_size>base_t_w;
10323 mutable base_t_w
_m;
10325 map_t(
const base_t_w&a)
noexcept:
_m(a){}
10326 this_t copy()noexcept(copy_construct.nothrow<base_t_w>){
10331 ~
map_t()noexcept(destruct.nothrow<base_t_w>)=default;
10340 return operator=(a.copy());
10347 auto tmp=
_m.find(a);
10352 return tmp.get_ref()._value;
10355 auto tmp=
_m.find(a);
10356 return tmp.fail()?const_default_value_of<T>:tmp.get_ref()._value;
10359 re_construct(
this);
10362 #define expr declvalue(func_t)(declvalue(T&))
10371 #define expr declvalue(func_t)(declvalue(const T&))
10375 func(add_const<T&>(a._value));
10380 static constexpr bool shrink_nothow=stack_t<data_t>::remove_nothrow;
10383 while(a.remove(data_t::seek_value_t(const_default_value_of<T>)));
10392 if(size()!=a.size())
10396 if(a[b._key]!=b._value)
10397 throw (
this_t*)(
nullptr);
10406 template<
typename T,
typename key_t,
template<
typename>
class stack_t,
size_t _,
size_t __>
10412 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/map/_body.hpp"
10413 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/map/_export.hpp"
10422 #define export using map_n::
10428 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/map/_body.hpp"
10429 #if defined(ELC_TEST_ON)
10430 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/map/_test.hpp"
10441 inline void test(){
10446 check_memory_lack();
10448 inline void test_log_out(){
10450 inline void test_end(){
10457 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/map/_body.hpp"
10462 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/_body.hpp"
10464 #if defined(ELC_TEST_ON)
10465 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/_test.hpp"
10474 inline void test(){
10477 function_n::test();
10480 inline void test_log_out(){
10481 array_n::test_log_out();
10482 function_n::test_log_out();
10483 stack_n::test_log_out();
10485 inline void test_end(){
10486 array_n::test_end();
10487 function_n::test_end();
10488 stack_n::test_end();
10493 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/_body.hpp"
10498 #line 35 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
10500 using namespace container;
10502 namespace memory::gc_n{
10504 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_body.hpp"
10513 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_flags/_body.hpp"
10522 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_flags/roots/_body.hpp"
10533 template<
typename T>
10536 template<
typename T>
10542 base_stack_t<value_t>_roots;
10561 template<
typename T>
10564 template<
typename T>
10569 roots_of<T>.add(
this);
10571 virtual T& get()noexcept=0;
10572 virtual
void map_and_mark()noexcept=0;
10574 template<typename T>
10575 inline T&
root_of<T>::get()noexcept{
return const_default_value_of<T>;}
10576 template<
typename T>
10581 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_flags/_body.hpp"
10582 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_flags/mark_able_for_gc/_body.hpp"
10591 template<
typename T>
10599 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_flags/_body.hpp"
10600 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_flags/others/_body.hpp"
10614 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_flags/_body.hpp"
10618 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_body.hpp"
10620 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_t/_body.hpp"
10629 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_t/default_method/decl.hpp"
10638 template<
class T,enable_flag>
10641 [[nodiscard]]inline
bool gc_success_identifier_of()noexcept;
10645 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_t/_body.hpp"
10647 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_t/defs.hpp"
10658 typedef function_t<
void()
noexcept>gc_method_t;
10659 typedef function_t<bool()
noexcept>success_identifier_t;
10661 base_stack_t<gc_method_t>_gc_methods;
10662 base_stack_t<success_identifier_t>_gc_success_identifiers;
10669 if(_gc_methods.empty())
10670 die_with(locale::str::empty_gc_method);
10671 _gc_methods.for_each(invoke<const gc_method_t>._as(
nothing));
10672 _gc_running.
unset();
10675 bool success=_gc_success_identifiers.empty();
10676 _gc_success_identifiers.for_each(
10686 _gc_methods.add(a);
10689 _gc_methods.remove(a);
10693 _gc_success_identifiers.add(a);
10696 _gc_success_identifiers.remove(a);
10701 add_gc_method((
void(*)()
noexcept)gc_method_of<T>);
10702 add_gc_success_identifier(gc_success_identifier_of<T>);
10706 remove_gc_method(gc_method_of<T>);
10707 remove_gc_success_identifier(gc_success_identifier_of<T>);
10713 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_t/_body.hpp"
10715 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_t/default_method/defs.hpp"
10724 namespace default_gc_for_type{
10725 template<
class T,enable_if(type_info<T>.has_attribute(count_able))>
10747 template_error(
"this function should not be instantiated,please overload the function destory_by_gc in the namespace where this type is defined.");
10750 template<
class T>
requires use_default_gc_able<T>
10752 constexpr auto&info=type_info<T>;
10754 if constexpr(info.has_attribute(
count_able))
10759 roots_of<T>.map_and_mark();
10763 if constexpr(info.has_attribute(
can_shrink))
10766 auto& b=attribute_cast<mark_able_for_gc>(*a);
10780 template<
class T>
requires use_default_gc_success_identifier_able<T>
10782 constexpr auto&info=type_info<T>;
10783 if constexpr(info.has_attribute(
count_able)){
10788 template<
class T,enable_if(default_gc_for_type::use_default_gc_able<T>)>
10790 default_gc_for_type::default_gc_method<T>();
10792 template<
class T,enable_if(default_gc_for_type::use_default_gc_success_
identifier_able<T>)>
10794 return default_gc_for_type::default_gc_success_identifier<T>();
10799 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_t/_body.hpp"
10803 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_body.hpp"
10805 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/defs.hpp"
10818 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_body.hpp"
10821 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_for_alloc/_body.hpp"
10836 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_body.hpp"
10837 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/root_ptr/_body.hpp"
10849 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/root_ptr/defs.hpp"
10859 template<
typename T>
10861 template_error(
"this function should not be instantiated,please overload the function map_and_mark_for_gc in the namespace where this type is defined");
10863 using ::elc::defs::memory::gc_n::root_of;
10866 comn_ptr_t<T>::replace_check_nothrow &&
10876 base_t::operator=(forward<assign_t>(a));
10879 virtual T&
get()noexcept
override{
10880 return base_t::operator*();
10889 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/root_ptr/_body.hpp"
10890 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/root_ptr/deduction_guides.hpp"
10904 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/root_ptr/_body.hpp"
10908 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/root_ptr/_export.hpp"
10918 #define export using memory::ptr_n::
10925 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/root_ptr/_body.hpp"
10931 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_body.hpp"
10933 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_export.hpp"
10944 #define export using gc_n::
10948 export mark_able_for_gc;
10956 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_body.hpp"
10958 #if defined(ELC_TEST_ON)
10959 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_test.hpp"
10968 #if!defined(_MSC_VER)
10970 with_common_attribute<can_map_all,can_shrink,count_able,mark_able_for_gc,never_in_array,ref_able>,
10974 ~gc_tester()
noexcept{destroy_time++;}
10978 static void reset_times(){
10979 shrink_time=destroy_time=0;
10982 static_assert(type_info<gc_tester>.base_on<can_map_all<gc_tester>>);
10983 void map_and_mark_for_gc(gc_tester*a){
10984 attribute_ptr_cast<mark_able_for_gc>(a)->mark();
10986 void destory_by_gc(gc_tester*a){
10990 inline void test(){
10991 #if!defined(_MSC_VER)
10995 using ::std::srand;
10996 srand((
unsigned)time(
nullptr));
10998 for(
int t=rand()%7;t--;)
11001 root_ptr_t<gc_tester> name=get<gc_tester>();
11002 for(i=rand()%72;i--;){
11003 #pragma warning(suppress: 4189)
11004 auto p=get<gc_tester>();
11007 stest_accert(gc_tester::shrink_time==i+1);
11008 stest_accert(gc_tester::destroy_time==i);
11009 stest_accert(get_size_of_get(&*name)==1);
11011 check_memory_lack();
11014 inline void test_log_out(){
11017 inline void test_end(){
11023 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_body.hpp"
11028 #line 40 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
11030 using namespace memory;
11032 #if defined(ELC_TEST_ON)
11033 namespace base_part_test{
11034 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_test.hpp"
11043 inline void test(){
11049 inline void test_log_out(){
11050 memory::test_log_out();
11051 container::test_log_out();
11053 inline void test_end(){
11054 memory::test_end();
11055 container::test_end();
11060 #line 46 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
11064 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
11072 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
11083 #if defined(_MSC_VER)
11084 #pragma warning(pop)
11086 #undef suppress_msvc_warning
11087 #undef disable_msvc_warning
11088 #undef push_msvc_warning
11089 #undef pop_msvc_warning
11090 #undef push_and_disable_msvc_warning
11093 #undef BIT_POSSIBILITY
11095 #if defined(ELC_VOID_NAME)
11096 #define void the_void
11101 #undef noexcept_as_auto
11102 #undef constexpr_as
11103 #undef constexpr_as_auto
11105 #undef using_method_from_base_t
11106 #undef using_method_from_value
11111 #undef re_declvalue
11116 #undef template_error
11117 #undef template_warning
11119 #undef type_info_of
11120 #undef type_name_of
11122 #undef is_common_attribute
11123 #undef is_special_attribute
11125 #undef has_attribute
11126 #undef not_has_attribute
11128 #undef float_size_of
11131 #undef def_common_attribute_with_nothing
11132 #undef def_special_attribute_with_nothing
11134 #undef common_attribute_t
11135 #undef special_attribute_t
11138 #undef enabled_by_default
11139 #undef disabled_by_default
11140 #undef enable_if_not_ill_form
11143 #undef was_an_ill_form
11144 #undef was_an_ill_form_with_parameter
11145 #undef was_not_an_ill_form
11146 #undef was_not_an_ill_form_and_noexcept
11147 #undef was_not_an_ill_form_with_parameter
11149 #undef recursive_lambda
11150 #undef get_recursive_lambda_caller
11152 #undef lambda_with_catch
11153 #undef self_recursion
11154 #undef lambda_RLSRRS
11162 #undef _small_than_
11164 #if defined(_MSC_VER)
11170 #undef INTER_NAMESPACE
11171 #undef BREAK_NAMESPACE
11176 #undef template_name
11179 #undef not_in_debug
11184 #undef ELC_TEST_EVENTNAME
11186 #undef override_instance_struct
11190 #undef force_inline
11192 #undef with_no_vtable
11194 #undef in_consteval
11196 #undef no_vtable_struct
11197 #undef no_vtable_class
11201 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
11205 #line 50 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
11209 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_export.hpp"
11218 #define export using defs::base::
11223 #line 53 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
11228 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
11233 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
11234 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
11243 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
11247 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
11248 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_exception"
11257 #if !defined(ELC_BASE_EXCEPTION)
11258 #define ELC_BASE_EXCEPTION
11259 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
11272 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
11276 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_exception"
11277 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_body.hpp"
11286 #if defined(ELC_TEST)
11287 #error "this part cannot be tested."
11290 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/default_data_type.hpp"
11300 typedef char32_t char_t;
11302 typedef int64_t
int_t;
11304 typedef uint64_t
uint_t;
11313 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_body.hpp"
11315 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
11323 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
11335 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
11337 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
11348 #define BIT_POSSIBILITY 2
11352 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
11354 #if defined(_MSC_VER)
11355 #pragma warning(push,ELC_WARNING_LEVEL)
11356 #pragma warning(disable:4099)
11357 #pragma warning(disable:26812)
11358 #pragma warning(disable:4584)
11359 #pragma warning(disable:4250)
11360 #pragma warning(disable:26432)
11361 #pragma warning(disable:26435)
11362 #pragma warning(disable:26481)
11363 #pragma warning(disable:26446)
11364 #pragma warning(disable:26434)
11365 #pragma warning(disable:26429)
11366 #pragma warning(disable:26471)
11367 #pragma warning(disable:26474)
11368 #pragma warning(disable:26473)
11369 #pragma warning(disable:26456)
11370 #pragma warning(disable:26485)
11371 #pragma warning(disable:26490)
11372 #pragma warning(disable:26472)
11373 #pragma warning(disable:26482)
11374 #pragma warning(disable:26493)
11376 #if defined(_MSC_VER)
11377 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
11378 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
11379 #define push_msvc_warning() __pragma(warning(push))
11380 #define pop_msvc_warning() __pragma(warning(pop))
11381 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
11383 #define suppress_msvc_warning(...)
11384 #define disable_msvc_warning(...)
11385 #define push_msvc_warning()
11386 #define pop_msvc_warning()
11387 #define push_and_disable_msvc_warning(...)
11390 #if defined(ELC_VOID_NAME)
11395 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
11396 #define noexcept_as_auto MAGIC
11397 #define constexpr_as(...) MAGIC constexpr
11398 #define constexpr_as_auto MAGIC MAGIC constexpr
11400 #define using_method_from_base_t(name,...) \
11401 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
11402 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
11404 return base_t::name(forward<Args>(rest)...);\
11407 #define using_method_from_value(name,value_name,...) \
11408 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
11409 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
11411 return value_name.name(forward<Args>(rest)...);\
11414 #define floop while(__builtin_is_my_dick_still_there())
11415 #define enable_adl(name) void name()noexcept=delete
11417 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
11418 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
11420 #define declvalue(...) (::std::declval<__VA_ARGS__>())
11423 #define template_error(reason) static_assert(template_error_helper<T>,reason)
11425 #define template_warning(reason) template_warning_helper<T>(reason)
11428 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
11429 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
11431 #define is_common_attribute(name) public attribute<T,name<T>>
11432 #define is_special_attribute(name) public attribute<T,name>
11434 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
11435 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
11438 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
11440 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
11443 #define def_common_attribute_with_nothing(name) \
11444 template<typename T>\
11447 #define def_special_attribute_with_nothing(name) \
11450 #define common_attribute_t template<class>class
11451 #define special_attribute_t class
11461 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
11463 #define enabled_by_default class enable_state=void
11465 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
11467 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
11469 #define enable_flag class enable_state
11471 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
11472 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
11473 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
11474 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
11475 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
11478 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
11480 #define get_recursive_lambda_caller(name) \
11481 lambda_with_catch(&)(auto&&...Args){\
11482 return name(name,Args...);\
11487 #define lambda_with_catch(...) [__VA_ARGS__]
11489 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
11491 #define lambda_RLSRRS _my_jb_super_sb_name_
11499 #define elseif else if
11501 #define _big_than_ >
11503 #define _small_than_ <
11505 #if defined(_MSC_VER)
11512 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
11514 #define BREAK_NAMESPACE }
11517 #define template_name template
11519 #define type_name class
11521 #if defined(DEBUG) || defined(_DEBUG)
11522 #define not_in_debug 0
11524 #define not_in_debug 1
11528 #define ec(ch) U ## ch
11530 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
11531 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
11533 #define ELC_TEST_EVENTNAME(name)
11536 #define override_instance_struct \
11538 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
11539 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
11540 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
11541 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
11542 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
11544 #if defined(_WIN32)
11545 #define distinctive __declspec(dllexport)
11547 #define distinctive
11550 #if defined(_WIN32)
11551 #define force_inline __forceinline
11552 #elif defined(__GNUC__)
11553 #define force_inline __attribute__((always_inline)) inline
11555 #define force_inline inline
11558 #if defined(_WIN32)
11559 #define with_no_vtable __declspec(novtable)
11561 #define with_no_vtable
11564 #define in_consteval (::std::is_constant_evaluated())
11566 #define no_vtable_struct struct with_no_vtable
11567 #define no_vtable_class class with_no_vtable
11571 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
11575 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_body.hpp"
11577 namespace exception_n{
11578 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/exception/_body.hpp"
11587 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/exception/exception.hpp"
11597 const char_t* _constexpr_str=locale::str::exception::unknow_error;
11602 virtual constexpr const
char_t*what()noexcept{
return _constexpr_str;}
11604 inline constexpr exception::~exception()noexcept{}
11607 using exception::exception;
11612 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/exception/_body.hpp"
11616 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_body.hpp"
11618 namespace exceptions=exception_n;
11620 #if defined(ELC_TEST_ON)
11621 namespace base_exception_part_test{
11622 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_test.hpp"
11630 inline void test(){
11633 inline void test_log_out(){
11635 inline void test_end(){
11640 #line 23 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_body.hpp"
11644 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
11652 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
11663 #if defined(_MSC_VER)
11664 #pragma warning(pop)
11666 #undef suppress_msvc_warning
11667 #undef disable_msvc_warning
11668 #undef push_msvc_warning
11669 #undef pop_msvc_warning
11670 #undef push_and_disable_msvc_warning
11673 #undef BIT_POSSIBILITY
11675 #if defined(ELC_VOID_NAME)
11676 #define void the_void
11681 #undef noexcept_as_auto
11682 #undef constexpr_as
11683 #undef constexpr_as_auto
11685 #undef using_method_from_base_t
11686 #undef using_method_from_value
11691 #undef re_declvalue
11696 #undef template_error
11697 #undef template_warning
11699 #undef type_info_of
11700 #undef type_name_of
11702 #undef is_common_attribute
11703 #undef is_special_attribute
11705 #undef has_attribute
11706 #undef not_has_attribute
11708 #undef float_size_of
11711 #undef def_common_attribute_with_nothing
11712 #undef def_special_attribute_with_nothing
11714 #undef common_attribute_t
11715 #undef special_attribute_t
11718 #undef enabled_by_default
11719 #undef disabled_by_default
11720 #undef enable_if_not_ill_form
11723 #undef was_an_ill_form
11724 #undef was_an_ill_form_with_parameter
11725 #undef was_not_an_ill_form
11726 #undef was_not_an_ill_form_and_noexcept
11727 #undef was_not_an_ill_form_with_parameter
11729 #undef recursive_lambda
11730 #undef get_recursive_lambda_caller
11732 #undef lambda_with_catch
11733 #undef self_recursion
11734 #undef lambda_RLSRRS
11742 #undef _small_than_
11744 #if defined(_MSC_VER)
11750 #undef INTER_NAMESPACE
11751 #undef BREAK_NAMESPACE
11756 #undef template_name
11759 #undef not_in_debug
11764 #undef ELC_TEST_EVENTNAME
11766 #undef override_instance_struct
11770 #undef force_inline
11772 #undef with_no_vtable
11774 #undef in_consteval
11776 #undef no_vtable_struct
11777 #undef no_vtable_class
11781 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
11785 #line 27 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_body.hpp"
11788 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_export.hpp"
11797 #define export using defs::exception_n::
11799 export runtime_exception;
11804 #line 30 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_body.hpp"
11809 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_exception"
11814 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
11815 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_stream"
11824 #if !defined(ELC_BASE_STREAM)
11825 #define ELC_BASE_STREAM
11826 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/_body.hpp"
11835 #if defined(ELC_TEST)
11836 #error "this part cannot be tested."
11839 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
11847 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
11859 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
11861 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
11872 #define BIT_POSSIBILITY 2
11876 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
11878 #if defined(_MSC_VER)
11879 #pragma warning(push,ELC_WARNING_LEVEL)
11880 #pragma warning(disable:4099)
11881 #pragma warning(disable:26812)
11882 #pragma warning(disable:4584)
11883 #pragma warning(disable:4250)
11884 #pragma warning(disable:26432)
11885 #pragma warning(disable:26435)
11886 #pragma warning(disable:26481)
11887 #pragma warning(disable:26446)
11888 #pragma warning(disable:26434)
11889 #pragma warning(disable:26429)
11890 #pragma warning(disable:26471)
11891 #pragma warning(disable:26474)
11892 #pragma warning(disable:26473)
11893 #pragma warning(disable:26456)
11894 #pragma warning(disable:26485)
11895 #pragma warning(disable:26490)
11896 #pragma warning(disable:26472)
11897 #pragma warning(disable:26482)
11898 #pragma warning(disable:26493)
11900 #if defined(_MSC_VER)
11901 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
11902 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
11903 #define push_msvc_warning() __pragma(warning(push))
11904 #define pop_msvc_warning() __pragma(warning(pop))
11905 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
11907 #define suppress_msvc_warning(...)
11908 #define disable_msvc_warning(...)
11909 #define push_msvc_warning()
11910 #define pop_msvc_warning()
11911 #define push_and_disable_msvc_warning(...)
11914 #if defined(ELC_VOID_NAME)
11919 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
11920 #define noexcept_as_auto MAGIC
11921 #define constexpr_as(...) MAGIC constexpr
11922 #define constexpr_as_auto MAGIC MAGIC constexpr
11924 #define using_method_from_base_t(name,...) \
11925 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
11926 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
11928 return base_t::name(forward<Args>(rest)...);\
11931 #define using_method_from_value(name,value_name,...) \
11932 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
11933 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
11935 return value_name.name(forward<Args>(rest)...);\
11938 #define floop while(__builtin_is_my_dick_still_there())
11939 #define enable_adl(name) void name()noexcept=delete
11941 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
11942 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
11944 #define declvalue(...) (::std::declval<__VA_ARGS__>())
11947 #define template_error(reason) static_assert(template_error_helper<T>,reason)
11949 #define template_warning(reason) template_warning_helper<T>(reason)
11952 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
11953 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
11955 #define is_common_attribute(name) public attribute<T,name<T>>
11956 #define is_special_attribute(name) public attribute<T,name>
11958 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
11959 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
11962 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
11964 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
11967 #define def_common_attribute_with_nothing(name) \
11968 template<typename T>\
11971 #define def_special_attribute_with_nothing(name) \
11974 #define common_attribute_t template<class>class
11975 #define special_attribute_t class
11985 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
11987 #define enabled_by_default class enable_state=void
11989 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
11991 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
11993 #define enable_flag class enable_state
11995 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
11996 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
11997 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
11998 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
11999 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
12002 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
12004 #define get_recursive_lambda_caller(name) \
12005 lambda_with_catch(&)(auto&&...Args){\
12006 return name(name,Args...);\
12011 #define lambda_with_catch(...) [__VA_ARGS__]
12013 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
12015 #define lambda_RLSRRS _my_jb_super_sb_name_
12023 #define elseif else if
12025 #define _big_than_ >
12027 #define _small_than_ <
12029 #if defined(_MSC_VER)
12036 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
12038 #define BREAK_NAMESPACE }
12041 #define template_name template
12043 #define type_name class
12045 #if defined(DEBUG) || defined(_DEBUG)
12046 #define not_in_debug 0
12048 #define not_in_debug 1
12052 #define ec(ch) U ## ch
12054 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
12055 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
12057 #define ELC_TEST_EVENTNAME(name)
12060 #define override_instance_struct \
12062 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
12063 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
12064 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
12065 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
12066 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
12068 #if defined(_WIN32)
12069 #define distinctive __declspec(dllexport)
12071 #define distinctive
12074 #if defined(_WIN32)
12075 #define force_inline __forceinline
12076 #elif defined(__GNUC__)
12077 #define force_inline __attribute__((always_inline)) inline
12079 #define force_inline inline
12082 #if defined(_WIN32)
12083 #define with_no_vtable __declspec(novtable)
12085 #define with_no_vtable
12088 #define in_consteval (::std::is_constant_evaluated())
12090 #define no_vtable_struct struct with_no_vtable
12091 #define no_vtable_class class with_no_vtable
12095 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
12099 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/_body.hpp"
12101 namespace stream_n{
12102 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/base_streams/_body.hpp"
12124 virtual void write(
const byte*buf,
size_t size)=0;
12132 virtual size_t read(
byte*buf,
size_t size)=0;
12135 return this->read(
cast_to_data(v),size*
sizeof(T))/
sizeof(T);
12144 virtual
void*tell()noexcept
override{
return this->seek(
cur,0);}
12146 virtual void sync()noexcept override=0;
12147 virtual
void flush()noexcept override=0;
12148 virtual
void close()noexcept override=0;
12151 virtual void write(
const byte*buf,
size_t size)
noexcept override=0;
12153 void write(
const T*v,
size_t size=1)noexcept{
12158 virtual size_t read(
byte*buf,
size_t size)
noexcept override=0;
12160 size_t read(T*v,
size_t size=1)noexcept{
12161 return this->read(
cast_to_data(v),size*
sizeof(T))/
sizeof(T);
12191 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/_body.hpp"
12193 using namespace stream_n;
12195 #if defined(ELC_TEST_ON)
12196 namespace base_stream_part_test{
12197 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/_test.hpp"
12205 inline void test(){
12208 inline void test_log_out(){
12210 inline void test_end(){
12215 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/_body.hpp"
12219 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
12227 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
12238 #if defined(_MSC_VER)
12239 #pragma warning(pop)
12241 #undef suppress_msvc_warning
12242 #undef disable_msvc_warning
12243 #undef push_msvc_warning
12244 #undef pop_msvc_warning
12245 #undef push_and_disable_msvc_warning
12248 #undef BIT_POSSIBILITY
12250 #if defined(ELC_VOID_NAME)
12251 #define void the_void
12256 #undef noexcept_as_auto
12257 #undef constexpr_as
12258 #undef constexpr_as_auto
12260 #undef using_method_from_base_t
12261 #undef using_method_from_value
12266 #undef re_declvalue
12271 #undef template_error
12272 #undef template_warning
12274 #undef type_info_of
12275 #undef type_name_of
12277 #undef is_common_attribute
12278 #undef is_special_attribute
12280 #undef has_attribute
12281 #undef not_has_attribute
12283 #undef float_size_of
12286 #undef def_common_attribute_with_nothing
12287 #undef def_special_attribute_with_nothing
12289 #undef common_attribute_t
12290 #undef special_attribute_t
12293 #undef enabled_by_default
12294 #undef disabled_by_default
12295 #undef enable_if_not_ill_form
12298 #undef was_an_ill_form
12299 #undef was_an_ill_form_with_parameter
12300 #undef was_not_an_ill_form
12301 #undef was_not_an_ill_form_and_noexcept
12302 #undef was_not_an_ill_form_with_parameter
12304 #undef recursive_lambda
12305 #undef get_recursive_lambda_caller
12307 #undef lambda_with_catch
12308 #undef self_recursion
12309 #undef lambda_RLSRRS
12317 #undef _small_than_
12319 #if defined(_MSC_VER)
12325 #undef INTER_NAMESPACE
12326 #undef BREAK_NAMESPACE
12331 #undef template_name
12334 #undef not_in_debug
12339 #undef ELC_TEST_EVENTNAME
12341 #undef override_instance_struct
12345 #undef force_inline
12347 #undef with_no_vtable
12349 #undef in_consteval
12351 #undef no_vtable_struct
12352 #undef no_vtable_class
12356 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
12360 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/_body.hpp"
12363 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/_export.hpp"
12372 #define export using defs::
12378 export noexcept_ostream;
12379 export noexcept_istream;
12380 export noexcept_iostream;
12385 #line 29 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/_body.hpp"
12390 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_stream"
12395 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
12396 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
12405 #if !defined(ELC_CORE)
12407 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
12416 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
12420 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
12421 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_exception"
12430 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_exception"
12434 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
12435 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_stream"
12444 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_stream"
12448 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
12449 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
12458 #if defined(ELC_TEST)
12459 #error "this part cannot be tested."
12462 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
12470 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
12482 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
12484 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
12495 #define BIT_POSSIBILITY 2
12499 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
12501 #if defined(_MSC_VER)
12502 #pragma warning(push,ELC_WARNING_LEVEL)
12503 #pragma warning(disable:4099)
12504 #pragma warning(disable:26812)
12505 #pragma warning(disable:4584)
12506 #pragma warning(disable:4250)
12507 #pragma warning(disable:26432)
12508 #pragma warning(disable:26435)
12509 #pragma warning(disable:26481)
12510 #pragma warning(disable:26446)
12511 #pragma warning(disable:26434)
12512 #pragma warning(disable:26429)
12513 #pragma warning(disable:26471)
12514 #pragma warning(disable:26474)
12515 #pragma warning(disable:26473)
12516 #pragma warning(disable:26456)
12517 #pragma warning(disable:26485)
12518 #pragma warning(disable:26490)
12519 #pragma warning(disable:26472)
12520 #pragma warning(disable:26482)
12521 #pragma warning(disable:26493)
12523 #if defined(_MSC_VER)
12524 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
12525 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
12526 #define push_msvc_warning() __pragma(warning(push))
12527 #define pop_msvc_warning() __pragma(warning(pop))
12528 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
12530 #define suppress_msvc_warning(...)
12531 #define disable_msvc_warning(...)
12532 #define push_msvc_warning()
12533 #define pop_msvc_warning()
12534 #define push_and_disable_msvc_warning(...)
12537 #if defined(ELC_VOID_NAME)
12542 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
12543 #define noexcept_as_auto MAGIC
12544 #define constexpr_as(...) MAGIC constexpr
12545 #define constexpr_as_auto MAGIC MAGIC constexpr
12547 #define using_method_from_base_t(name,...) \
12548 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
12549 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
12551 return base_t::name(forward<Args>(rest)...);\
12554 #define using_method_from_value(name,value_name,...) \
12555 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
12556 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
12558 return value_name.name(forward<Args>(rest)...);\
12561 #define floop while(__builtin_is_my_dick_still_there())
12562 #define enable_adl(name) void name()noexcept=delete
12564 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
12565 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
12567 #define declvalue(...) (::std::declval<__VA_ARGS__>())
12570 #define template_error(reason) static_assert(template_error_helper<T>,reason)
12572 #define template_warning(reason) template_warning_helper<T>(reason)
12575 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
12576 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
12578 #define is_common_attribute(name) public attribute<T,name<T>>
12579 #define is_special_attribute(name) public attribute<T,name>
12581 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
12582 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
12585 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
12587 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
12590 #define def_common_attribute_with_nothing(name) \
12591 template<typename T>\
12594 #define def_special_attribute_with_nothing(name) \
12597 #define common_attribute_t template<class>class
12598 #define special_attribute_t class
12608 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
12610 #define enabled_by_default class enable_state=void
12612 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
12614 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
12616 #define enable_flag class enable_state
12618 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
12619 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
12620 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
12621 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
12622 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
12625 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
12627 #define get_recursive_lambda_caller(name) \
12628 lambda_with_catch(&)(auto&&...Args){\
12629 return name(name,Args...);\
12634 #define lambda_with_catch(...) [__VA_ARGS__]
12636 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
12638 #define lambda_RLSRRS _my_jb_super_sb_name_
12646 #define elseif else if
12648 #define _big_than_ >
12650 #define _small_than_ <
12652 #if defined(_MSC_VER)
12659 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
12661 #define BREAK_NAMESPACE }
12664 #define template_name template
12666 #define type_name class
12668 #if defined(DEBUG) || defined(_DEBUG)
12669 #define not_in_debug 0
12671 #define not_in_debug 1
12675 #define ec(ch) U ## ch
12677 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
12678 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
12680 #define ELC_TEST_EVENTNAME(name)
12683 #define override_instance_struct \
12685 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
12686 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
12687 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
12688 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
12689 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
12691 #if defined(_WIN32)
12692 #define distinctive __declspec(dllexport)
12694 #define distinctive
12697 #if defined(_WIN32)
12698 #define force_inline __forceinline
12699 #elif defined(__GNUC__)
12700 #define force_inline __attribute__((always_inline)) inline
12702 #define force_inline inline
12705 #if defined(_WIN32)
12706 #define with_no_vtable __declspec(novtable)
12708 #define with_no_vtable
12711 #define in_consteval (::std::is_constant_evaluated())
12713 #define no_vtable_struct struct with_no_vtable
12714 #define no_vtable_class class with_no_vtable
12718 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
12722 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
12725 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/_body.hpp"
12734 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/decl.hpp"
12751 namespace string_n{
12752 template<
typename char_T>
12755 template<constexpr_str_n::constexpr_str_t_literal_helper str_helper>
12756 inline constexpr string operator""_elc_string()noexcept;
12759 using string_n::
string;
12762 template<typename T>
12763 [[nodiscard]]inline ptr make_long_term_binary_node_from(T a)noexcept;
12765 template<typename T>
12766 constexpr
bool as_ptr_nothrow_helper()noexcept{
12783 elseif constexpr(type_info<remove_cvref<T>> == type_info<char_t>)
12784 return noexcept(make_long_term_binary_node_from<char_t>(
declvalue(T)));
12785 elseif constexpr(::std::is_integral_v<remove_cvref<T>>){
12786 if constexpr(::std::is_signed_v<remove_cvref<T>>)
12787 return noexcept(make_long_term_binary_node_from<int_t>(
declvalue(T)));
12789 return noexcept(make_long_term_binary_node_from<uint_t>(
declvalue(T)));
12791 elseif constexpr(::std::is_floating_point_v<remove_cvref<T>>)
12792 return noexcept(make_long_term_binary_node_from<float_t>(
declvalue(T)));
12793 elseif constexpr(construct<string>.able<T>){
12794 return noexcept(make_long_term_binary_node_from<string>(
declvalue(T)));
12797 template<
typename T>
12798 decltype(
auto)
as_ptr(T&&a)
noexcept(as_ptr_nothrow_helper<T>()){
12807 return &
static_cast<const node_like&
>(a);
12809 return ptr(
static_cast<value&
>(a));
12816 elseif constexpr(type_info<remove_cvref<T>> == type_info<char_t>)
12817 return make_long_term_binary_node_from<char_t>(a);
12818 elseif constexpr(::std::is_integral_v<remove_cvref<T>>){
12819 if constexpr(::std::is_signed_v<remove_cvref<T>>)
12820 return make_long_term_binary_node_from<int_t>(a);
12822 return make_long_term_binary_node_from<uint_t>(a);
12824 elseif constexpr(::std::is_floating_point_v<remove_cvref<T>>)
12825 return make_long_term_binary_node_from<float_t>(a);
12826 elseif constexpr(construct<string>.able<T>){
12827 return make_long_term_binary_node_from<string>(a);
12831 template<
typename T>
12844 template<
typename T>
12845 decltype(
auto)
as_value(T&& a)
noexcept(as_value_nothrow_helper<T>()){
12848 return static_cast<value&
>(a);
12850 return static_cast<const value&
>(a);
12861 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/_body.hpp"
12863 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/node_like.hpp"
12872 [[nodiscard]]
inline ptr make_list()noexcept;
12873 template<typename T,typename...Args>
12874 [[nodiscard]]inline ptr make_list(T&&first,Args&&...rest);
12877 with_common_attribute<abstract_base,weak_ref_able,
replace_able,ref_able>{
12883 [[nodiscard]]virtual
value be_eval();
12884 [[nodiscard]]virtual
value be_call(
ptr);
12888 [[nodiscard]]
virtual constexpr size_t equal_level()const noexcept{
return 36;}
12889 [[nodiscard]]
virtual constexpr size_t eq_level()const noexcept{
return 36;}
12897 [[nodiscard]]
value operator[](
const value index);
12899 return operator[](
as_value(index));
12904 [[nodiscard]]virtual explicit operator
hash_t()const noexcept{
return hash((
void*)
this);}
12906 this->be_replace_as(null_ptr);
12913 [[nodiscard]]
virtual explicit operator logical_bool()const noexcept{
return true;}
12914 [[nodiscard]]
explicit operator bool()const noexcept{
return(
bool)this->
operator logical_bool();}
12916 template<
typename...Args>
12920 const auto this_eqlv = this->eq_level();
12921 const auto arg_eqlv = a->eq_level();
12923 return a->eq_with(
this);
12925 return this->eq_with(a);
12927 return this->eq_with(a)&&a->eq_with(
this);
12930 const auto this_equlv = this->equal_level();
12931 const auto arg_equlv = a->equal_level();
12933 return a->equal_with(
this);
12935 return this->equal_with(a);
12937 return this->equal_with(a)&&a->equal_with(
this);
12943 return a.equal(
this);
12946 friend void the_waiting_for_destroy(
node_like* a)
noexcept;
12951 [[nodiscard]]
inline constexpr node_like*the_get_null_ptr(
const node_like*)
noexcept;
12959 return a->operator
hash_t();
12963 a->waiting_for_destroy();
12976 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/_body.hpp"
12977 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/ptr.hpp"
12986 typedef comn_ptr_t<node_like>ptr;
12987 typedef weak_ptr_t<node_like>weak_ptr;
12988 typedef comn_ptr_t<const node_like>const_ptr;
12989 typedef weak_ptr_t<const node_like>const_weak_ptr;
12993 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/_body.hpp"
12994 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/value.hpp"
13006 with_common_attribute<abstract_base,ref_able,never_in_array,replace_able>,
13034 [[nodiscard]]virtual
ptr get_value()=0;
13044 virtual
void be_set(
ptr a)noexcept override final{}
13057 virtual
void be_set(
ptr)noexcept override final{}
13070 virtual
void be_set(
ptr a)noexcept override final{
_m=a;}
13076 mutable comn_ptr_t<base_data_t>
_m;
13093 return operator=(
as_ptr(a));
13097 return _m->get_value();
13100 return _m->get_value();
13103 return operator ptr();
13108 [[nodiscard]]
explicit operator bool()
const{
return bool(
_m->get_value());}
13111 _m.do_replace(a._m);
13124 template<
typename T>
13126 return (*
operator&())[forward<T>(index)];
13128 template<
typename...Args>
requires(invoke<node_like>.able<Args...>)
13129 inline auto operator()(Args&&... rest)
noexcept(invoke<node_like>.nothrow<Args...>){
return(*
operator&())(forward<Args>(rest)...);}
13141 [[nodiscard]]
operator ptr::for_delete_t*(){
13142 return _m->get_value();
13147 return&value::null_data;
13161 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/_body.hpp"
13163 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/node_like_using_value_func_defs.hpp"
13173 [[nodiscard]]
inline value node_like::be_eval(){
13174 return value(
this);
13177 return value(
this);
13182 return arec(index);
13187 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/_body.hpp"
13191 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
13192 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/runtime_exception/_body.hpp"
13201 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/runtime_exception/base_runtime_exception.hpp"
13211 using runtime_exception::runtime_exception;
13216 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/runtime_exception/_body.hpp"
13217 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/runtime_exception/core_runtime_internal_helper.hpp"
13226 namespace core_runtime_internal_helper_n{
13228 using base_runtime_exception::base_runtime_exception;
13242 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/runtime_exception/_body.hpp"
13246 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
13247 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/_body.hpp"
13256 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/base_constexpr.hpp"
13268 [[nodiscard]]
virtual constexpr size_t equal_level()const noexcept
override{
return magic_number::god;}
13269 [[nodiscard]]
virtual constexpr size_t eq_level()const noexcept
override{
return magic_number::god;}
13283 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/_body.hpp"
13284 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/void.hpp"
13300 [[nodiscard]]
virtual constexpr size_t equal_level()const noexcept
override{
return max(type_info<size_t>);}
13301 [[nodiscard]]
virtual constexpr size_t eq_level()const noexcept
override{
return max(type_info<size_t>);}
13318 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/_body.hpp"
13319 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/nil.hpp"
13333 [[nodiscard]]
virtual constexpr explicit operator hash_t()const noexcept
override{
return hash(
false);}
13334 [[nodiscard]]
virtual constexpr explicit operator logical_bool()const noexcept
override{
return false;}
13339 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/_body.hpp"
13340 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/t.hpp"
13354 [[nodiscard]]
virtual constexpr explicit operator hash_t()const noexcept
override{
return hash(
true);}
13355 [[nodiscard]]
virtual constexpr explicit operator logical_bool()const noexcept
override{
return true;}
13363 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/_body.hpp"
13367 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
13368 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/_body.hpp"
13377 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/common_node.hpp"
13389 map_t<value,const_weak_ptr>
_m;
13394 if(a->get_type_info() != this->get_type_info())
13396 const this_t*p=down_cast<const this_t*>(a.get());
13407 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/_body.hpp"
13408 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/cons.hpp"
13444 if(a->get_type_info() != this->get_type_info())
13446 const this_t*p=down_cast<const this_t*>(a.get());
13447 return _car==p->
_car&&_cdr==p->
_cdr;
13457 ptr to=get<common_node>();
13469 template<
typename T,
typename...Args>
13477 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/_body.hpp"
13478 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/expr.hpp"
13496 return as_ptr(_car)->be_call(_cdr);
13503 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/_body.hpp"
13504 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/base_binary_function_node.hpp"
13536 if(a->get_type_info() != this->get_type_info())
13538 const this_t*p=down_cast<const this_t*>(a.get());
13540 return _func==p->
_func;
13549 virtual void clear()noexcept
override{_func=
nullptr;}
13554 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/_body.hpp"
13555 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/binary_node_t.hpp"
13570 [[noreturn]] virtual
void throw_self_ptr()const=0;
13571 [[noreturn]] virtual
void throw_self_ptr()=0;
13572 template<typename T>
13574 template<typename T>
13576 template<typename T>
13577 friend[[nodiscard]]inline const T& const_use_by_ref_as(
const_ptr p)noexcept;
13579 template<typename T>
13591 static constexpr bool hash_nothrow_helper=
hash.able<T>?
13594 [[nodiscard]]
virtual explicit operator hash_t()const noexcept(hash_nothrow_helper)
override{
13595 if constexpr(
hash.able<T>)
13598 #if defined(_MSC_VER)
13599 [[gsl::suppress(f.6)]]
13601 return node_like::operator
hash_t();
13609 if(a->get_type_info() != this->get_type_info())
13611 const base_t*base_p=down_cast<const base_t*>(a.get());
13614 const this_t*p=down_cast<const this_t*>(base_p);
13618 return node_like::eq_with(a);
13629 return arec_as_value(
_m,index);
13636 re_construct.nothrow<T>;
13638 virtual void clear()noexcept(clear_nothrow_helper)
override{
13646 template<
typename T>
13649 if(p->get_type_info() == type_info<binary_node_base_t>){
13650 auto base_p = down_cast<const binary_node_base_t*>(p.get());
13651 if(base_p->get_additional_type_info() == type_info<target_node_t>)
13653 elseif constexpr(::std::is_class_v<T> && !::std::is_final_v<T>){
13655 base_p->throw_self_ptr();
13660 catch(
const void*){}
13665 template<
typename T>
13668 if(p->get_type_info() == type_info<binary_node_base_t>){
13669 auto base_p = down_cast<binary_node_base_t*>(p.get());
13670 if(base_p->get_additional_type_info() == type_info<target_node_t>)
13671 return down_cast<target_node_t*>(base_p)->_m;
13672 elseif constexpr(::std::is_class_v<T> && !::std::is_final_v<T>){
13674 base_p->throw_self_ptr();
13684 template<
typename T>
13686 return maybe_fail_use_by_ref_as<T>(p).get_ref();
13688 template<
typename T>
13691 if(p->get_type_info() == type_info<binary_node_base_t>){
13692 auto base_p = down_cast<const binary_node_base_t*>(p.get());
13693 if(base_p->get_additional_type_info() == type_info<target_node_t>)
13694 return down_cast<const target_node_t*>(base_p)->_m;
13695 elseif constexpr(::std::is_class_v<T> && !::std::is_final_v<T>){
13697 base_p->throw_self_ptr();
13699 catch(
const T*aret){
13702 catch(
const void*){}
13705 return const_default_value_of<T>;
13707 template<
typename T>
13709 return const_use_by_ref_as<T>(p);
13711 template<
typename T>
13713 return const_use_by_ref_as<T>(p);
13715 template<
typename T>
13717 return use_by_ref_as<T>(
as_ptr(a));
13719 template<
typename T>
13721 return get<binary_node_t<T>>(move(a));
13723 template<
typename T>
13725 template<
typename T>
13727 ptr& to = long_term_binary_node_storager<T>[a];
13728 if(!
bool(to) || const_use_by_ref_as<T>(to)!=a)
13729 to = make_binary_node_from<T>(move(a));
13735 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/_body.hpp"
13736 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/code_list.hpp"
13746 return p->be_eval();
13780 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/_body.hpp"
13784 #line 19 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
13787 #if defined(ELC_TEST_ON)
13788 namespace core_part_test{
13789 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_test.hpp"
13797 inline void test(){
13800 inline void test_log_out(){
13802 inline void test_end(){
13807 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
13811 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
13819 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
13830 #if defined(_MSC_VER)
13831 #pragma warning(pop)
13833 #undef suppress_msvc_warning
13834 #undef disable_msvc_warning
13835 #undef push_msvc_warning
13836 #undef pop_msvc_warning
13837 #undef push_and_disable_msvc_warning
13840 #undef BIT_POSSIBILITY
13842 #if defined(ELC_VOID_NAME)
13843 #define void the_void
13848 #undef noexcept_as_auto
13849 #undef constexpr_as
13850 #undef constexpr_as_auto
13852 #undef using_method_from_base_t
13853 #undef using_method_from_value
13858 #undef re_declvalue
13863 #undef template_error
13864 #undef template_warning
13866 #undef type_info_of
13867 #undef type_name_of
13869 #undef is_common_attribute
13870 #undef is_special_attribute
13872 #undef has_attribute
13873 #undef not_has_attribute
13875 #undef float_size_of
13878 #undef def_common_attribute_with_nothing
13879 #undef def_special_attribute_with_nothing
13881 #undef common_attribute_t
13882 #undef special_attribute_t
13885 #undef enabled_by_default
13886 #undef disabled_by_default
13887 #undef enable_if_not_ill_form
13890 #undef was_an_ill_form
13891 #undef was_an_ill_form_with_parameter
13892 #undef was_not_an_ill_form
13893 #undef was_not_an_ill_form_and_noexcept
13894 #undef was_not_an_ill_form_with_parameter
13896 #undef recursive_lambda
13897 #undef get_recursive_lambda_caller
13899 #undef lambda_with_catch
13900 #undef self_recursion
13901 #undef lambda_RLSRRS
13909 #undef _small_than_
13911 #if defined(_MSC_VER)
13917 #undef INTER_NAMESPACE
13918 #undef BREAK_NAMESPACE
13923 #undef template_name
13926 #undef not_in_debug
13931 #undef ELC_TEST_EVENTNAME
13933 #undef override_instance_struct
13937 #undef force_inline
13939 #undef with_no_vtable
13941 #undef in_consteval
13943 #undef no_vtable_struct
13944 #undef no_vtable_class
13948 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
13952 #line 28 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
13955 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_export.hpp"
13964 #define export using defs::core::
13983 #line 31 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
13985 #if defined(ELC_STRING)
13986 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_multi/string_arec_as_value.hpp"
13997 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
14005 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
14017 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
14019 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
14030 #define BIT_POSSIBILITY 2
14034 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
14036 #if defined(_MSC_VER)
14037 #pragma warning(push,ELC_WARNING_LEVEL)
14038 #pragma warning(disable:4099)
14039 #pragma warning(disable:26812)
14040 #pragma warning(disable:4584)
14041 #pragma warning(disable:4250)
14042 #pragma warning(disable:26432)
14043 #pragma warning(disable:26435)
14044 #pragma warning(disable:26481)
14045 #pragma warning(disable:26446)
14046 #pragma warning(disable:26434)
14047 #pragma warning(disable:26429)
14048 #pragma warning(disable:26471)
14049 #pragma warning(disable:26474)
14050 #pragma warning(disable:26473)
14051 #pragma warning(disable:26456)
14052 #pragma warning(disable:26485)
14053 #pragma warning(disable:26490)
14054 #pragma warning(disable:26472)
14055 #pragma warning(disable:26482)
14056 #pragma warning(disable:26493)
14058 #if defined(_MSC_VER)
14059 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
14060 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
14061 #define push_msvc_warning() __pragma(warning(push))
14062 #define pop_msvc_warning() __pragma(warning(pop))
14063 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
14065 #define suppress_msvc_warning(...)
14066 #define disable_msvc_warning(...)
14067 #define push_msvc_warning()
14068 #define pop_msvc_warning()
14069 #define push_and_disable_msvc_warning(...)
14072 #if defined(ELC_VOID_NAME)
14077 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
14078 #define noexcept_as_auto MAGIC
14079 #define constexpr_as(...) MAGIC constexpr
14080 #define constexpr_as_auto MAGIC MAGIC constexpr
14082 #define using_method_from_base_t(name,...) \
14083 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
14084 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
14086 return base_t::name(forward<Args>(rest)...);\
14089 #define using_method_from_value(name,value_name,...) \
14090 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
14091 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
14093 return value_name.name(forward<Args>(rest)...);\
14096 #define floop while(__builtin_is_my_dick_still_there())
14097 #define enable_adl(name) void name()noexcept=delete
14099 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
14100 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
14102 #define declvalue(...) (::std::declval<__VA_ARGS__>())
14105 #define template_error(reason) static_assert(template_error_helper<T>,reason)
14107 #define template_warning(reason) template_warning_helper<T>(reason)
14110 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
14111 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
14113 #define is_common_attribute(name) public attribute<T,name<T>>
14114 #define is_special_attribute(name) public attribute<T,name>
14116 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
14117 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
14120 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
14122 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
14125 #define def_common_attribute_with_nothing(name) \
14126 template<typename T>\
14129 #define def_special_attribute_with_nothing(name) \
14132 #define common_attribute_t template<class>class
14133 #define special_attribute_t class
14143 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
14145 #define enabled_by_default class enable_state=void
14147 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
14149 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
14151 #define enable_flag class enable_state
14153 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
14154 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
14155 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
14156 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
14157 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
14160 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
14162 #define get_recursive_lambda_caller(name) \
14163 lambda_with_catch(&)(auto&&...Args){\
14164 return name(name,Args...);\
14169 #define lambda_with_catch(...) [__VA_ARGS__]
14171 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
14173 #define lambda_RLSRRS _my_jb_super_sb_name_
14181 #define elseif else if
14183 #define _big_than_ >
14185 #define _small_than_ <
14187 #if defined(_MSC_VER)
14194 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
14196 #define BREAK_NAMESPACE }
14199 #define template_name template
14201 #define type_name class
14203 #if defined(DEBUG) || defined(_DEBUG)
14204 #define not_in_debug 0
14206 #define not_in_debug 1
14210 #define ec(ch) U ## ch
14212 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
14213 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
14215 #define ELC_TEST_EVENTNAME(name)
14218 #define override_instance_struct \
14220 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
14221 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
14222 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
14223 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
14224 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
14226 #if defined(_WIN32)
14227 #define distinctive __declspec(dllexport)
14229 #define distinctive
14232 #if defined(_WIN32)
14233 #define force_inline __forceinline
14234 #elif defined(__GNUC__)
14235 #define force_inline __attribute__((always_inline)) inline
14237 #define force_inline inline
14240 #if defined(_WIN32)
14241 #define with_no_vtable __declspec(novtable)
14243 #define with_no_vtable
14246 #define in_consteval (::std::is_constant_evaluated())
14248 #define no_vtable_struct struct with_no_vtable
14249 #define no_vtable_class class with_no_vtable
14253 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
14257 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_multi/string_arec_as_value.hpp"
14259 namespace string_n{
14260 template<
class char_T>
14261 value
arec_as_value(string_t<char_T>&str,
const value index){
14262 size_t i=size_t(use_as<int_t>(index));
14264 i=size_t(use_as<uint_t>(index));
14265 struct arec_data_t final:instance_struct<arec_data_t>
14266 ,value::base_data_t{
14267 typename string_t<char_T>::arec_t
_m;
14268 arec_data_t(string_t<char_T>&str,
size_t index)
noexcept:
_m(&str,index){};
14269 arec_data_t(
const arec_data_t&ref)
noexcept:
_m(special_init,ref._m){}
14270 virtual ~arec_data_t()noexcept override final=default;
14272 virtual
void be_set(ptr a)noexcept override final{
move(
_m)=use_as<char_T>(a);}
14273 [[nodiscard]]
virtual ptr get_value()noexcept override final{
return core::make_binary_node_from<char_T>(
move(
_m));}
14274 [[nodiscard]]
virtual base_data_t*
copy()const noexcept override final{
return get<arec_data_t>(*
this);}
14275 [[nodiscard]]
virtual base_type_info_t get_type_info()const noexcept override final{
return type_info<arec_data_t>;}
14277 return get<arec_data_t>(str,i);
14281 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
14289 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
14300 #if defined(_MSC_VER)
14301 #pragma warning(pop)
14303 #undef suppress_msvc_warning
14304 #undef disable_msvc_warning
14305 #undef push_msvc_warning
14306 #undef pop_msvc_warning
14307 #undef push_and_disable_msvc_warning
14310 #undef BIT_POSSIBILITY
14312 #if defined(ELC_VOID_NAME)
14313 #define void the_void
14318 #undef noexcept_as_auto
14319 #undef constexpr_as
14320 #undef constexpr_as_auto
14322 #undef using_method_from_base_t
14323 #undef using_method_from_value
14328 #undef re_declvalue
14333 #undef template_error
14334 #undef template_warning
14336 #undef type_info_of
14337 #undef type_name_of
14339 #undef is_common_attribute
14340 #undef is_special_attribute
14342 #undef has_attribute
14343 #undef not_has_attribute
14345 #undef float_size_of
14348 #undef def_common_attribute_with_nothing
14349 #undef def_special_attribute_with_nothing
14351 #undef common_attribute_t
14352 #undef special_attribute_t
14355 #undef enabled_by_default
14356 #undef disabled_by_default
14357 #undef enable_if_not_ill_form
14360 #undef was_an_ill_form
14361 #undef was_an_ill_form_with_parameter
14362 #undef was_not_an_ill_form
14363 #undef was_not_an_ill_form_and_noexcept
14364 #undef was_not_an_ill_form_with_parameter
14366 #undef recursive_lambda
14367 #undef get_recursive_lambda_caller
14369 #undef lambda_with_catch
14370 #undef self_recursion
14371 #undef lambda_RLSRRS
14379 #undef _small_than_
14381 #if defined(_MSC_VER)
14387 #undef INTER_NAMESPACE
14388 #undef BREAK_NAMESPACE
14393 #undef template_name
14396 #undef not_in_debug
14401 #undef ELC_TEST_EVENTNAME
14403 #undef override_instance_struct
14407 #undef force_inline
14409 #undef with_no_vtable
14411 #undef in_consteval
14413 #undef no_vtable_struct
14414 #undef no_vtable_class
14418 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
14422 #line 35 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_multi/string_arec_as_value.hpp"
14427 #line 34 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
14432 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
14437 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
14438 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/lib_loader"
14447 #if !defined(ELC_LIB_LOADER)
14448 #define ELC_LIB_LOADER
14449 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
14458 #if !defined(ELC_STRING)
14460 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
14469 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
14473 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
14474 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
14483 #if defined(ELC_TEST)
14484 #error "this part cannot be tested."
14487 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
14495 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
14507 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
14509 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
14520 #define BIT_POSSIBILITY 2
14524 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
14526 #if defined(_MSC_VER)
14527 #pragma warning(push,ELC_WARNING_LEVEL)
14528 #pragma warning(disable:4099)
14529 #pragma warning(disable:26812)
14530 #pragma warning(disable:4584)
14531 #pragma warning(disable:4250)
14532 #pragma warning(disable:26432)
14533 #pragma warning(disable:26435)
14534 #pragma warning(disable:26481)
14535 #pragma warning(disable:26446)
14536 #pragma warning(disable:26434)
14537 #pragma warning(disable:26429)
14538 #pragma warning(disable:26471)
14539 #pragma warning(disable:26474)
14540 #pragma warning(disable:26473)
14541 #pragma warning(disable:26456)
14542 #pragma warning(disable:26485)
14543 #pragma warning(disable:26490)
14544 #pragma warning(disable:26472)
14545 #pragma warning(disable:26482)
14546 #pragma warning(disable:26493)
14548 #if defined(_MSC_VER)
14549 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
14550 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
14551 #define push_msvc_warning() __pragma(warning(push))
14552 #define pop_msvc_warning() __pragma(warning(pop))
14553 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
14555 #define suppress_msvc_warning(...)
14556 #define disable_msvc_warning(...)
14557 #define push_msvc_warning()
14558 #define pop_msvc_warning()
14559 #define push_and_disable_msvc_warning(...)
14562 #if defined(ELC_VOID_NAME)
14567 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
14568 #define noexcept_as_auto MAGIC
14569 #define constexpr_as(...) MAGIC constexpr
14570 #define constexpr_as_auto MAGIC MAGIC constexpr
14572 #define using_method_from_base_t(name,...) \
14573 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
14574 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
14576 return base_t::name(forward<Args>(rest)...);\
14579 #define using_method_from_value(name,value_name,...) \
14580 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
14581 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
14583 return value_name.name(forward<Args>(rest)...);\
14586 #define floop while(__builtin_is_my_dick_still_there())
14587 #define enable_adl(name) void name()noexcept=delete
14589 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
14590 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
14592 #define declvalue(...) (::std::declval<__VA_ARGS__>())
14595 #define template_error(reason) static_assert(template_error_helper<T>,reason)
14597 #define template_warning(reason) template_warning_helper<T>(reason)
14600 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
14601 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
14603 #define is_common_attribute(name) public attribute<T,name<T>>
14604 #define is_special_attribute(name) public attribute<T,name>
14606 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
14607 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
14610 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
14612 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
14615 #define def_common_attribute_with_nothing(name) \
14616 template<typename T>\
14619 #define def_special_attribute_with_nothing(name) \
14622 #define common_attribute_t template<class>class
14623 #define special_attribute_t class
14633 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
14635 #define enabled_by_default class enable_state=void
14637 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
14639 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
14641 #define enable_flag class enable_state
14643 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
14644 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
14645 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
14646 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
14647 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
14650 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
14652 #define get_recursive_lambda_caller(name) \
14653 lambda_with_catch(&)(auto&&...Args){\
14654 return name(name,Args...);\
14659 #define lambda_with_catch(...) [__VA_ARGS__]
14661 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
14663 #define lambda_RLSRRS _my_jb_super_sb_name_
14671 #define elseif else if
14673 #define _big_than_ >
14675 #define _small_than_ <
14677 #if defined(_MSC_VER)
14684 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
14686 #define BREAK_NAMESPACE }
14689 #define template_name template
14691 #define type_name class
14693 #if defined(DEBUG) || defined(_DEBUG)
14694 #define not_in_debug 0
14696 #define not_in_debug 1
14700 #define ec(ch) U ## ch
14702 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
14703 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
14705 #define ELC_TEST_EVENTNAME(name)
14708 #define override_instance_struct \
14710 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
14711 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
14712 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
14713 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
14714 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
14716 #if defined(_WIN32)
14717 #define distinctive __declspec(dllexport)
14719 #define distinctive
14722 #if defined(_WIN32)
14723 #define force_inline __forceinline
14724 #elif defined(__GNUC__)
14725 #define force_inline __attribute__((always_inline)) inline
14727 #define force_inline inline
14730 #if defined(_WIN32)
14731 #define with_no_vtable __declspec(novtable)
14733 #define with_no_vtable
14736 #define in_consteval (::std::is_constant_evaluated())
14738 #define no_vtable_struct struct with_no_vtable
14739 #define no_vtable_class class with_no_vtable
14743 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
14747 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
14749 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/defs.hpp"
14758 namespace string_n{
14759 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
14768 inline namespace string_data_n{
14769 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_decl.hpp"
14778 template<
typename char_T>
14781 template<
typename char_T>
14783 template<
typename char_T>
14786 template<
typename char_T>
14789 template<
typename char_T>
14792 template<
typename char_T>
14794 template<
typename char_T>
14797 template<
typename char_T>
14800 template<
typename char_T>
14802 template<
typename char_T>
14808 template<
typename char_T>
14813 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
14815 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/base_string_data_t.hpp"
14824 template<
typename char_T>
14826 with_common_attribute<abstract_base,never_in_array,replace_able,ref_able>,
build_by_get_only{
14833 static constexpr bool copy_assign_nothrow=copy_assign.
nothrow<char_T>;
14834 static constexpr bool copy_construct_nothrow=copy_construct.
nothrow<char_T>;
14835 static constexpr bool move_construct_nothrow=move_construct.
nothrow<char_T>;
14836 static constexpr bool construct_nothrow=construct<char_T>.nothrow<>;
14837 static constexpr bool destruct_nothrow=destruct.
nothrow<char_T>;
14838 static constexpr bool clear_nothrow=destruct_nothrow;
14839 static constexpr bool ptr_reset_nothrow=destruct_nothrow;
14840 static constexpr bool hash_nothrow=
hash.nothrow<char_T>;
14841 static constexpr bool get_data_nothrow=copy_construct_nothrow&&destruct_nothrow;
14842 static constexpr bool apply_data_nothrow=construct_nothrow&©_assign_nothrow;
14859 [[nodiscard]]
bool is_unique()noexcept{
return get_ref_num(
this)==1; }
14860 virtual void be_replace_as(ptr_t a)
noexcept(clear_nothrow)=0;
14864 [[nodiscard]]virtual char_T* get_c_str(
ptr_t&)noexcept(get_data_nothrow);
14865 [[nodiscard]]virtual const char_T* get_const_c_str(
ptr_t&p)noexcept(get_data_nothrow){
return get_c_str(p);}
14866 [[nodiscard]]
virtual const char_T*
get_data(
ptr_t&p)
noexcept(get_data_nothrow){
return get_c_str(p);}
14867 [[nodiscard]]
virtual char_T* get_unique_c_str(ptr_t&)
noexcept(get_data_nothrow);
14869 [[nodiscard]]virtual
ptr_t get_substr_data(
size_t begin,
size_t size)noexcept;
14870 [[nodiscard]]virtual
ptr_t apply_str_to_begin(
string_view_t str)noexcept(copy_construct_nothrow&&apply_data_nothrow);
14871 [[nodiscard]]virtual
ptr_t apply_str_to_begin(
ptr_t str)noexcept(apply_data_nothrow);
14872 [[nodiscard]]virtual
ptr_t apply_str_to_end(
string_view_t str)noexcept(copy_construct_nothrow&&apply_data_nothrow);
14873 [[nodiscard]]virtual
ptr_t apply_str_to_end(
ptr_t str)noexcept(apply_data_nothrow);
14875 [[nodiscard]]virtual
ptr_t do_insert(
size_t pos,
string_view_t str)noexcept(copy_construct_nothrow);
14876 [[nodiscard]]virtual
ptr_t do_insert(
size_t pos,
ptr_t str)noexcept;
14877 [[nodiscard]]virtual
ptr_t do_erase(
size_t pos,
size_t size)noexcept;
14879 [[nodiscard]]virtual
ptr_t do_pop_back(
size_t size,
ptr_t& self)noexcept(construct_nothrow&©_assign_nothrow){
14880 const auto pos = this->get_size()-size;
14881 const auto before = get_substr_data(0,pos);
14882 const auto after = get_substr_data(pos,size);
14887 const auto pos = size;
14888 const auto before = get_substr_data(0,pos);
14889 const auto after = get_substr_data(pos,this->get_size()-size);
14922 if(this->has_hash_cache()&&with->has_hash_cache())
14923 if(this->get_hash_cache()!=with->get_hash_cache())
14932 if(same_type(with)&&same_struct(with))
14933 aret=same_struct_equal(with);
14936 aret=default_equal_method(with);
14940 equivalent_optimization(
this,with);
14946 const size_t self_size=get_size();
14947 return equal_with(with,0,self_size);
14955 auto a=this->get_the_largest_complete_data_block_begin_form(index);
14956 auto b=with->get_the_largest_complete_data_block_begin_form(index);
14958 const size_t step=
min({a.size(),b.size(),size});
14959 if(a.begin()!=b.begin())
14960 if(!
equal(a.begin(),b.begin(),step))
14965 a=this->get_the_largest_complete_data_block_begin_form(index);
14967 a={a.begin()+step,note::size(a.size()-step)};
14969 b=with->get_the_largest_complete_data_block_begin_form(index);
14971 b={b.begin()+step,note::size(b.size()-step)};
14972 if(!a.size()&&!b.size())
14973 return a.size()==b.size();
14978 size_t size=with.size();
14980 auto a=this->get_the_largest_complete_data_block_begin_form(index);
14981 if(a.begin()==with.begin() && a.size()==with.size())
14984 auto b=with.begin()+index;
14985 const size_t step=
min({a.size(),with.size()-index,size});
14986 if(!
equal(a.begin(),b,step))
14991 a=this->get_the_largest_complete_data_block_begin_form(index);
14993 a={a.begin()+step,note::size(a.size()-step)};
14994 if(!a.size()||!size)
14995 return a.size()==size;
14999 size_t size=get_size();
15001 auto a=this->get_the_largest_complete_data_block_begin_form(index);
15002 if(a.begin()==with && with[a.size()]==char_T{})
15008 size_t step=
min({a.size(),size});
15014 a=this->get_the_largest_complete_data_block_begin_form(index);
15016 a={a.begin()+step,note::size(a.size()-step)};
15027 return strong_ordering::equivalent;
15035 if(same_type(with)&&same_struct(with))
15036 aret=same_struct_compare(with);
15039 aret=default_compare_method(with);
15043 equivalent_optimization(
this,with);
15049 const size_t self_size=get_size();
15050 return compare_with(with,0,self_size);
15056 return strong_ordering::equivalent;
15058 auto a=this->get_the_largest_complete_data_block_begin_form(index);
15059 auto b=with->get_the_largest_complete_data_block_begin_form(index);
15061 const size_t step=
min({a.size(),b.size(),size});
15062 if(a.begin()!=b.begin())
15063 if(
auto tmp=
compare(a.begin(),b.begin(),step); tmp!=0)
15068 a=this->get_the_largest_complete_data_block_begin_form(index);
15070 a={a.begin()+step,note::size(a.size()-step)};
15072 b=with->get_the_largest_complete_data_block_begin_form(index);
15074 b={b.begin()+step,note::size(b.size()-step)};
15075 if(!a.size()||!b.size())
15076 return a.size()<=>b.size();
15078 return strong_ordering::equivalent;
15081 size_t size=with.size();
15083 auto a=this->get_the_largest_complete_data_block_begin_form(index);
15084 if(a.begin()==with.begin() && a.size()==with.size())
15085 return strong_ordering::equivalent;
15087 auto b=with.begin()+index;
15088 size_t step=
min({a.size(),with.size()-index,size});
15089 if(
auto tmp=
compare(a.begin(),b,step); tmp!=0)
15094 a=this->get_the_largest_complete_data_block_begin_form(index);
15096 a={a.begin()+step,note::size(a.size()-step)};
15097 if(!a.size()||!size)
15098 return a.size()<=>size;
15102 size_t size=get_size();
15104 auto a=this->get_the_largest_complete_data_block_begin_form(index);
15105 if(a.begin()==with && with[a.size()]==char_T{})
15106 return strong_ordering::equivalent;
15110 return strong_ordering::greater;
15111 size_t step=
min({a.size(),size});
15117 a=this->get_the_largest_complete_data_block_begin_form(index);
15119 a={a.begin()+step,note::size(a.size()-step)};
15121 return *(with+index)==char_T{}? strong_ordering::equivalent:
15122 strong_ordering::less;
15124 return strong_ordering::greater;
15130 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)=0;
15131 virtual void arec_set(
size_t index,char_T a,
ptr_t& p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)=0;
15134 bool _has_hash_cache=
false;
15141 if(has_hash_cache())
15142 return get_hash_cache();
15144 const auto tmp=this->get_hash_detail(p);
15145 return p->set_hash_cache(tmp);
15150 const auto size=get_size();
15151 const auto data=get_data(p);
15152 return hash(data,size);
15156 if(pos==0&&size==get_size())
15157 return hash.merge_array_hash_results(before,before_size,get_hash(p),size);
15158 return this->get_others_hash_with_calculated_before_detail(before,before_size,p,pos,size);
15162 return hash.with_calculated_before(before,before_size,get_data(p)+pos,size);
15166 reset_hash_cache();
15171 return get_base_memory_cost()/get_ref_num(
this);
15173 [[nodiscard]]
float_size_t get_memory_cost_after_gc()noexcept;
15174 [[nodiscard]]
float_size_t get_gc_profit()noexcept{
return get_memory_cost()-get_memory_cost_after_gc();}
15191 a->be_replace_as(b);
15197 if(a->get_memory_cost() >= b->get_memory_cost())
15203 template<
typename char_T>
15210 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
15212 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/null_string_data_t.hpp"
15221 template<
typename char_T>
15228 using base_t::copy_assign_nothrow;
15229 using base_t::copy_construct_nothrow;
15230 using base_t::move_construct_nothrow;
15231 using base_t::construct_nothrow;
15232 using base_t::destruct_nothrow;
15233 using base_t::clear_nothrow;
15234 using base_t::ptr_reset_nothrow;
15235 using base_t::hash_nothrow;
15236 using base_t::get_data_nothrow;
15237 using base_t::apply_data_nothrow;
15238 using base_t::set_hash_cache;
15244 static char_T data[1]{};
15247 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return 0; }
15248 [[nodiscard]]
virtual ptr_t get_substr_data([[maybe_unused]]
size_t begin,[[maybe_unused]]
size_t size)
noexcept override final{
return this; }
15254 [[nodiscard]]
virtual ptr_t do_insert([[maybe_unused]]
size_t pos,[[maybe_unused]]
string_view_t str)
noexcept(construct_nothrow&©_assign_nothrow)
override final{
return get<comn_string_data_t<char_T>>(str); }
15255 [[nodiscard]]
virtual ptr_t do_insert([[maybe_unused]]
size_t pos,[[maybe_unused]]
ptr_t str)
noexcept override final{
return str; }
15256 [[nodiscard]]
virtual ptr_t do_erase([[maybe_unused]]
size_t pos,[[maybe_unused]]
size_t size)
noexcept override final{
return this; }
15258 virtual void copy_part_data_to([[maybe_unused]]char_T* to,[[maybe_unused]]
size_t pos,[[maybe_unused]]
size_t size)
noexcept override final{
return; }
15260 [[nodiscard]]
virtual char_T
arec([[maybe_unused]]
size_t index)
noexcept override final{
return char_T{}; }
15261 virtual void arec_set([[maybe_unused]]
size_t index,[[maybe_unused]]char_T a,[[maybe_unused]]
ptr_t& p)
noexcept override final{
nothing; }
15262 [[nodiscard]]
virtual ptr_t do_pop_back([[maybe_unused]]
size_t size,[[maybe_unused]]
ptr_t& self)
noexcept override final{
return this; }
15263 [[nodiscard]]
virtual ptr_t do_pop_front([[maybe_unused]]
size_t size,[[maybe_unused]]
ptr_t& self)
noexcept override final{
return this; }
15274 template<
typename char_T>
15276 template<
typename char_T>
15281 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
15282 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/constexpr_string_data_t.hpp"
15291 template<
typename char_T>
15298 using base_t::copy_assign_nothrow;
15299 using base_t::copy_construct_nothrow;
15300 using base_t::move_construct_nothrow;
15301 using base_t::construct_nothrow;
15302 using base_t::destruct_nothrow;
15303 using base_t::clear_nothrow;
15304 using base_t::ptr_reset_nothrow;
15305 using base_t::hash_nothrow;
15306 using base_t::get_data_nothrow;
15307 using base_t::apply_data_nothrow;
15308 using base_t::set_hash_cache;
15315 bool match_pattern_by_get = 0;
15318 if(match_pattern_by_get){
15321 _p_match_pattern =
nullptr;
15322 _p_reverse_match_pattern =
nullptr;
15329 set_hash_cache(
hash(str));
15332 match_pattern_by_get=0;
15338 be_replace_as(null_ptr);
15341 clear_match_pattern();
15347 [[nodiscard]]
virtual const char_T*
get_data(
ptr_t&)
noexcept(get_data_nothrow)
override final{
return _m;}
15352 return base_t::get_const_c_str(p);
15354 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _size; }
15356 virtual void copy_part_data_to(char_T* to,
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{ copy_assign[size](note::from(
_m+pos),note::to(to)); }
15358 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
return _m[index]; }
15361 virtual void arec_set(
size_t index,char_T a,
ptr_t&p)
noexcept override final{base_t::arec_set(index,a,p);}
15368 auto wp=down_cast<this_t*>(with.get());
15371 return equal(
_m,wp->_m,_size);
15374 auto wp=down_cast<this_t*>(with.get());
15376 return strong_ordering::equivalent;
15385 if(!_p_match_pattern){
15386 _p_match_pattern=get<range_n::match_pattern<const char_T>>(
array_like_view_t{this->get_data(self),this->get_size()});
15387 match_pattern_by_get = 1;
15389 return *_p_match_pattern;
15392 if(!_p_reverse_match_pattern){
15393 _p_reverse_match_pattern=get<range_n::reverse_match_pattern<const char_T>>(
array_like_view_t{this->get_data(self),this->get_size()});
15394 match_pattern_by_get = 1;
15396 return *_p_reverse_match_pattern;
15402 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
15404 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/comn_string_data_t.hpp"
15413 template<
typename char_T>
15419 using base_t::self_changed;
15421 using base_t::copy_assign_nothrow;
15422 using base_t::copy_construct_nothrow;
15423 using base_t::move_construct_nothrow;
15424 using base_t::construct_nothrow;
15425 using base_t::destruct_nothrow;
15426 using base_t::clear_nothrow;
15427 using base_t::ptr_reset_nothrow;
15428 using base_t::hash_nothrow;
15429 using base_t::get_data_nothrow;
15430 using base_t::apply_data_nothrow;
15431 using base_t::set_hash_cache;
15437 unget(_p_match_pattern);
15438 unget(_p_reverse_match_pattern);
15439 base_t::self_changed();
15442 clear_match_pattern();
15443 base_t::self_changed();
15447 copy_assign[str.size()](note::from(str.begin()),note::to((char_T*)
_m));
15451 auto size=this->get_size();
15452 str->copy_part_data_to((char_T*)
_m,0,size);
15456 str->copy_part_data_to((char_T*)
_m,pos,size);
15467 clear_match_pattern();
15472 base_t::be_replace_as(a);
15476 if(this->is_unique())
15477 return (char_T*)
_m;
15479 return base_t::get_unique_c_str(p);
15481 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _m.size()-1; }
15483 virtual void copy_part_data_to(char_T* to,
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{ copy_assign[size](note::from((
const char_T*)
_m+pos),note::to(to)); }
15485 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
return _m[index]; }
15486 virtual void arec_set(
size_t index,char_T a,
ptr_t&p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)
override final{
15487 if(this->is_unique()){
15488 copy_assign(
_m[index],a);
15492 base_t::arec_set(index,a,p);
15500 auto wp=down_cast<this_t*>(with.get());
15504 auto wp=down_cast<this_t*>(with.get());
15513 if(!_p_match_pattern){
15514 _p_match_pattern=get<range_n::match_pattern<const char_T>>(
array_like_view_t{this->get_data(self),this->get_size()});
15516 return *_p_match_pattern;
15519 if(!_p_reverse_match_pattern){
15520 _p_reverse_match_pattern=get<range_n::reverse_match_pattern<const char_T>>(
array_like_view_t{this->get_data(self),this->get_size()});
15522 return *_p_reverse_match_pattern;
15525 template<
typename char_T>
15527 auto comn_data=get<comn_string_data_t<char_T>>(
this);
15528 if(positive_gc_profit())
15529 a.do_replace(comn_data);
15534 template<
typename char_T>
15536 auto comn_data=get<comn_string_data_t<char_T>>(
this);
15540 template<
typename char_T>
15542 copy_assign(this->get_unique_c_str(p)[index],a);
15544 template<
typename char_T>
15546 const auto size_of_base_array=this->get_size()*
sizeof(char_T);
15548 return size/get_ref_num(
this);
15550 template<
typename char_T>
15552 auto comn_data=get<comn_string_data_t<char_T>>(
this);
15556 template<
typename char_T>
15558 auto comn_data=get<comn_string_data_t<char_T>>(
this);
15565 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
15567 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/substr_string_data_t.hpp"
15576 template<
typename char_T>
15582 using base_t::self_changed;
15584 using base_t::copy_assign_nothrow;
15585 using base_t::copy_construct_nothrow;
15586 using base_t::move_construct_nothrow;
15587 using base_t::construct_nothrow;
15588 using base_t::destruct_nothrow;
15589 using base_t::clear_nothrow;
15590 using base_t::ptr_reset_nothrow;
15591 using base_t::hash_nothrow;
15592 using base_t::get_data_nothrow;
15593 using base_t::apply_data_nothrow;
15594 using base_t::set_hash_cache;
15602 be_replace_as(null_ptr);
15606 null_equivalent_check();
15611 base_t::be_replace_as(a);
15613 [[nodiscard]]
virtual ptr_t get_substr_data(
size_t begin,
size_t size)
noexcept override final{
return get<substr_string_data_t<char_T>>(_to,begin+_sub_begin,size); }
15615 if(_sub_begin+_sub_size==_to->get_size())
15616 return _to->get_const_c_str(_to)+_sub_begin;
15618 return base_t::get_const_c_str(p);
15620 [[nodiscard]]
virtual const char_T*
get_data(
ptr_t&)
noexcept(get_data_nothrow)
override final{
return _to->get_data(_to)+_sub_begin; }
15621 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _sub_size; }
15623 virtual void copy_part_data_to(char_T* to,
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{ _to->copy_part_data_to(to,pos+_sub_begin,size); }
15625 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
return _to->arec(index+_sub_begin); }
15626 virtual void arec_set(
size_t index,char_T a,
ptr_t& p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)
override final{
15627 if(this->is_unique()){
15628 _to->arec_set(index+_sub_begin,a,_to);
15632 base_t::arec_set(index,a,p);
15635 if(this->is_unique() && _sub_begin==0){
15636 _to=_to->apply_str_to_begin(str);
15637 _sub_size+=str.size();
15642 return base_t::apply_str_to_begin(str);
15645 if(this->is_unique() && _sub_begin==0){
15646 _to=_to->apply_str_to_begin(str);
15647 _sub_size+=str->get_size();
15652 return base_t::apply_str_to_begin(str);
15655 if(this->is_unique() && _sub_begin+_sub_size==_to->get_size()){
15656 _to=_to->apply_str_to_end(str);
15657 _sub_size+=str.size();
15662 return base_t::apply_str_to_end(str);
15665 if(this->is_unique() && _sub_begin+_sub_size==_to->get_size()){
15666 _to=_to->apply_str_to_end(str);
15667 _sub_size+=str->get_size();
15672 return base_t::apply_str_to_end(str);
15675 if(this->is_unique() && _sub_begin==0){
15676 auto aret=_to->do_pop_front(size,_to);
15678 null_equivalent_check();
15683 return base_t::do_pop_front(size,self);
15685 [[nodiscard]]
virtual ptr_t do_pop_back(
size_t size,
ptr_t& self)
noexcept(construct_nothrow&©_assign_nothrow)
override final{
15686 if(this->is_unique() && _sub_begin+_sub_size==_to->get_size()){
15687 auto aret=_to->do_pop_back(size,_to);
15689 null_equivalent_check();
15694 return base_t::do_pop_back(size,self);
15699 result=_to->get_others_hash_with_calculated_before(result,0,_to,_sub_begin,_sub_size);
15703 return _to->get_others_hash_with_calculated_before(before,before_size,_to,pos+_sub_begin,size);
15707 auto wp = down_cast<this_t*>(with.get());
15708 return _sub_begin == wp->_sub_begin;
15711 auto result = _to->get_the_largest_complete_data_block_begin_form(_sub_begin+begin);
15712 auto size =
min(result.size(),_sub_size-begin);
15713 return {result.begin(), note::size(size)};
15716 auto wp=down_cast<this_t*>(with.get());
15717 return _to->equal_with(wp->_to,_sub_begin,_sub_size);
15720 auto wp=down_cast<this_t*>(with.get());
15721 return _to->compare_with(wp->_to,_sub_begin,_sub_size);
15727 template<
typename char_T>
15729 if(begin==0&&size==get_size())
15732 return get<substr_string_data_t<char_T>>(
this,begin,size);
15737 #line 19 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
15739 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/head_apply_string_data_t.hpp"
15748 template<
typename char_T>
15754 using base_t::self_changed;
15756 using base_t::copy_assign_nothrow;
15757 using base_t::copy_construct_nothrow;
15758 using base_t::move_construct_nothrow;
15759 using base_t::construct_nothrow;
15760 using base_t::destruct_nothrow;
15761 using base_t::clear_nothrow;
15762 using base_t::ptr_reset_nothrow;
15763 using base_t::hash_nothrow;
15764 using base_t::get_data_nothrow;
15765 using base_t::apply_data_nothrow;
15766 using base_t::set_hash_cache;
15774 _to_size(str->get_size()),
15775 _used_size(head.size()),
15778 _m.resize(get_next_gold_size_to_resize_for_array(_to_size+_used_size));
15779 copy_assign[_used_size](note::from<const char_T*>(head.begin()),note::to<char_T*>(
_m.end()-_used_size));
15783 if(begin>=_used_size)
15784 return _to->get_substr_data(begin-_used_size,size);
15786 return base_t::get_substr_data(begin,size);
15790 return _to->get_c_str(_to);
15792 return base_t::get_c_str(p);
15795 if(type_info<this_t> ==
typeid(*a)){
15796 const auto p = down_cast<this_t*>(a.get());
15797 if(_used_size==p->_used_size && _to!=p->_to)
15798 base_t::equivalent_optimization(_to, p->_to);
15802 base_t::be_replace_as(a);
15804 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _used_size+_to_size; }
15807 return this->apply_str_to_begin(str);
15809 return this->apply_str_to_end(str);
15810 elseif(this->is_unique()){
15811 if(pos<_used_size){
15812 if(
_m.size()-_used_size<str.size()){
15813 const auto size_now=this->get_size()+str.size();
15814 const auto size_new=get_next_gold_size_to_resize_for_array(size_now);
15815 _m.insert_with_forward_resize(pos,str.size(),str.begin(),size_new);
15818 char_T* orogin_head_begin=
_m.end()-_used_size;
15819 char_T* head_begin=orogin_head_begin-str.size();
15820 copy_assign[pos](note::from<const char_T*>(orogin_head_begin),note::to<char_T*>(head_begin));
15821 copy_assign[str.size()](note::from<const char_T*>(str.begin()),note::to<char_T*>(head_begin+pos));
15823 _used_size+=str.size();
15825 _to=_to->do_insert(pos-_used_size,str);
15826 _to_size=_to->get_size();
15832 return base_t::do_insert(pos,str);
15835 virtual void copy_part_data_to(char_T* to,
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{
15836 if(pos<_used_size){
15837 const char_T* head_begin=
_m.end()-_used_size;
15838 const char_T* head_end=
_m.end();
15839 const char_T* copy_begin=pos+head_begin;
15840 size_t size_of_copy_from_head=
min(
size_t(head_end-copy_begin),size);
15842 copy_assign[size_of_copy_from_head](note::from(copy_begin),note::to(to));
15843 if(size!=size_of_copy_from_head){
15844 const size_t size_left=size-size_of_copy_from_head;
15845 char_T* next_copy_begin_pos=to+size_of_copy_from_head;
15846 _to->copy_part_data_to(next_copy_begin_pos,0,size_left);
15850 _to->copy_part_data_to(to,pos-_used_size,size);
15853 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
15854 if(index<_used_size){
15855 const char_T* head_begin=
_m.end()-_used_size;
15856 return head_begin[index];
15859 return _to->arec(index-_used_size);
15861 virtual void arec_set(
size_t index,char_T a,
ptr_t& p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)
override final{
15862 if(this->is_unique()){
15863 if(index<_used_size){
15864 char_T* head_begin=
_m.end()-_used_size;
15865 copy_assign(head_begin[index],a);
15868 _to->arec_set(index-_used_size,a,_to);
15872 base_t::arec_set(index,a,p);
15875 if(this->is_unique()){
15876 if(
_m.size()-_used_size<str.size()){
15877 const auto size_now=this->get_size()+str.size();
15878 const auto size_new=get_next_gold_size_to_resize_for_array(size_now);
15879 _m.insert_with_forward_resize(0,str.size(),str.begin(),size_new);
15882 copy_assign[str.size()](note::from<const char_T*>(str.begin()),note::to<char_T*>(
_m.end()-_used_size-str.size()));
15883 _used_size+=str.size();
15888 return base_t::apply_str_to_begin(str);
15892 return base_t::apply_str_to_begin(str);
15895 _m.forward_resize(_used_size);
15898 if(this->is_unique()){
15899 _to=_to->apply_str_to_end(str);
15900 _to_size+=str.size();
15905 return base_t::apply_str_to_end(str);
15908 if(this->is_unique()){
15909 _to=_to->apply_str_to_end(str);
15910 _to_size+=str->get_size();
15915 return base_t::apply_str_to_end(str);
15918 if(this->is_unique() && _used_size>=size){
15921 return get<comn_string_data_t<char_T>>(
string_view_t{(char_T*)
_m.end()-_used_size-size,size});
15924 return base_t::do_pop_front(size,self);
15926 [[nodiscard]]
virtual ptr_t do_pop_back(
size_t size,
ptr_t& self)
noexcept(construct_nothrow&©_assign_nothrow)
override final{
15927 if(this->is_unique()){
15928 auto aret=_to->do_pop_back(size,_to);
15934 return base_t::do_pop_back(size,self);
15941 const char_T* head_begin=
_m.end()-_used_size;
15942 result=
hash(head_begin,_used_size);
15944 result=
hash.merge_array_hash_results(result,_used_size,_to->get_hash(_to),_to_size);
15947 result=_to->get_hash(_to);
15951 if(pos<_used_size){
15952 const char_T* head_begin=
_m.end()-_used_size;
15953 const char_T* head_end=
_m.end();
15954 const char_T* calculate_begin=pos+head_begin;
15955 const size_t size_of_calculate_from_head=
min(
size_t(head_end-calculate_begin),size);
15957 before=
hash.with_calculated_before(before,before_size,calculate_begin,size_of_calculate_from_head);
15958 if(size!=size_of_calculate_from_head){
15959 const size_t size_left=size-size_of_calculate_from_head;
15960 before_size+=size_of_calculate_from_head;
15961 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,0,size_left);
15965 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos-_used_size,size);
15970 auto wp=down_cast<this_t*>(with.get());
15971 return _used_size==wp->_used_size;
15974 if(begin >= _used_size)
15975 return _to->get_the_largest_complete_data_block_begin_form(begin-_used_size);
15977 const char_T* head_begin =
_m.end() - _used_size;
15978 const char_T* head_end =
_m.end();
15979 const char_T* ret_begin = begin+head_begin;
15980 return {ret_begin, head_end};
15984 auto wp=down_cast<this_t*>(with.get());
15985 const char_T* head_begin =
_m.end() - _used_size;
15986 const char_T* wp_head_begin = wp->_m.end() - _used_size;
15987 if(!
equal(head_begin,wp_head_begin,_used_size))
15989 return _to->equal_with(wp->_to);
15992 auto wp=down_cast<this_t*>(with.get());
15993 const char_T* head_begin =
_m.end() - _used_size;
15994 const char_T* wp_head_begin = wp->_m.end() - _used_size;
15995 if(
auto tmp=
compare(head_begin,wp_head_begin,_used_size); tmp!=0)
15997 return _to->compare_with(wp->_to);
16000 return _to->get_memory_cost()+
float_size_of(*
this)+
_m.size_in_byte();
16003 template<
typename char_T>
16013 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
16014 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/end_apply_string_data_t.hpp"
16023 template<
typename char_T>
16029 using base_t::self_changed;
16031 using base_t::copy_assign_nothrow;
16032 using base_t::copy_construct_nothrow;
16033 using base_t::move_construct_nothrow;
16034 using base_t::construct_nothrow;
16035 using base_t::destruct_nothrow;
16036 using base_t::clear_nothrow;
16037 using base_t::ptr_reset_nothrow;
16038 using base_t::hash_nothrow;
16039 using base_t::get_data_nothrow;
16040 using base_t::apply_data_nothrow;
16041 using base_t::set_hash_cache;
16049 _to_size(str->get_size()),
16050 _used_size(
end.size()),
16053 _m.resize(get_next_gold_size_to_resize_for_array(_to_size+_used_size));
16054 copy_assign[_used_size](note::from(
end.begin()),note::to((char_T*)
_m));
16057 _to_size(str->get_size()),
16061 _m.resize(get_next_gold_size_to_resize_for_array(_to_size+_used_size));
16062 copy_assign[_used_size](ch,note::to((char_T*)
_m));
16065 _to_size(str->get_size()),
16069 _m.resize(get_next_gold_size_to_resize_for_array(_to_size+_used_size));
16073 if(begin+size<=_to_size)
16074 return _to->get_substr_data(begin,size);
16076 return base_t::get_substr_data(begin,size);
16080 return _to->get_c_str(_to);
16082 return base_t::get_c_str(p);
16085 if(type_info<this_t> ==
typeid(*a)){
16086 const auto p = down_cast<this_t*>(a.get());
16087 if(_used_size==p->_used_size && _to!=p->_to)
16088 base_t::equivalent_optimization(_to, p->_to);
16092 base_t::be_replace_as(a);
16094 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _used_size+_to_size; }
16097 return this->apply_str_to_begin(str);
16099 return this->apply_str_to_end(str);
16100 elseif(this->is_unique()){
16102 _to=_to->do_insert(pos-_used_size,str);
16103 _to_size=_to->get_size();
16107 if(
_m.size()-_used_size<str.size()){
16108 const auto size_now=this->get_size()+str.size();
16109 const auto size_new=get_next_gold_size_to_resize_for_array(size_now);
16110 _m.insert_with_resize(pos,str.size(),str.begin(),size_new);
16113 copy_assign[_used_size-pos](note::from<const char_T*>(&
_m[pos]),note::to((char_T*)&
_m[pos+str.size()]));
16114 copy_assign[str.size()](note::from<const char_T*>(str.begin()),note::to<char_T*>(&
_m[pos]));
16116 _used_size+=str.size();
16122 return base_t::do_insert(pos,str);
16125 virtual void copy_part_data_to(char_T* to,
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{
16126 if(pos+size<=_to_size)
16127 _to->copy_part_data_to(to,pos,size);
16130 _to->copy_part_data_to(to,pos,_to_size-pos);
16131 auto copied_size=_to_size-pos;
16138 copy_assign[size](note::from((
const char_T*)
_m+pos),note::to(to));
16142 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
16144 return _to->arec(index);
16146 return _m[index-_to_size];
16148 virtual void arec_set(
size_t index,char_T a,
ptr_t& p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)
override final{
16149 if(this->is_unique()){
16151 _to->arec_set(index,a,_to);
16153 copy_assign(
_m[index - _to_size],a);
16157 base_t::arec_set(index,a,p);
16161 if(this->is_unique()){
16162 if(
_m.size()-_used_size < str.size()){
16163 const auto size_now=this->get_size()+str.size();
16164 const auto size_new=get_next_gold_size_to_resize_for_array(size_now);
16165 _m.insert_with_resize(_used_size,str.size(),str.begin(),size_new);
16168 copy_assign[str.size()](note::from(str.begin()),note::to((char_T*)
_m+_used_size));
16169 _used_size+=str.size();
16174 return base_t::apply_str_to_end(str);
16178 return base_t::apply_str_to_end(str);
16181 if(this->is_unique()){
16182 _to=_to->apply_str_to_begin(str);
16183 _to_size+=str.size();
16188 return base_t::apply_str_to_begin(str);
16191 if(this->is_unique()){
16192 _to=_to->apply_str_to_begin(str);
16193 _to_size+=str->get_size();
16198 return base_t::apply_str_to_begin(str);
16201 if(this->is_unique()){
16202 auto aret=_to->do_pop_front(size,_to);
16208 return base_t::do_pop_front(size,self);
16210 [[nodiscard]]
virtual ptr_t do_pop_back(
size_t size,
ptr_t& self)
noexcept(construct_nothrow&©_assign_nothrow)
override final{
16211 if(this->is_unique() && _used_size>=size){
16214 return get<comn_string_data_t<char_T>>(
string_view_t{(char_T*)
_m+_used_size,size});
16217 return base_t::do_pop_back(size,self);
16221 return hash.with_calculated_before(_to->get_hash(_to),_to_size,
string_view_t(
_m.begin(),_used_size));
16224 if(pos+size<=_to_size)
16225 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos,size);
16228 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos,_to_size-pos);
16229 const auto calculated_size=_to_size-pos;
16231 size-=calculated_size;
16232 before_size+=calculated_size;
16236 before=
hash.with_calculated_before(before,before_size,(
const char_T*)
_m+pos,size);
16241 _m.resize(_used_size);
16245 auto wp = down_cast<this_t*>(with.get());
16246 return _used_size==wp->_used_size;
16249 if(begin < _to_size){
16250 return _to->get_the_largest_complete_data_block_begin_form(begin);
16254 return {
_m.begin()+begin,note::size(_used_size-begin)};
16258 auto wp=down_cast<this_t*>(with.get());
16259 if(!_to->equal_with(wp->_to))
16261 return equal((char_T*)
_m.begin(),(char_T*)wp->_m.begin(),_used_size);
16264 auto wp=down_cast<this_t*>(with.get());
16265 if(
auto tmp=_to->compare_with(wp->_to); tmp!=0)
16267 return compare((char_T*)
_m.begin(),(char_T*)wp->_m.begin(),_used_size);
16270 return _to->get_memory_cost()+
float_size_of(*
this)+
_m.size_in_byte();
16273 template<
typename char_T>
16283 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
16285 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/sum_string_data_t.hpp"
16294 template<
typename char_T>
16300 using base_t::self_changed;
16302 using base_t::copy_assign_nothrow;
16303 using base_t::copy_construct_nothrow;
16304 using base_t::move_construct_nothrow;
16305 using base_t::construct_nothrow;
16306 using base_t::destruct_nothrow;
16307 using base_t::clear_nothrow;
16308 using base_t::ptr_reset_nothrow;
16309 using base_t::hash_nothrow;
16310 using base_t::get_data_nothrow;
16311 using base_t::apply_data_nothrow;
16312 using base_t::set_hash_cache;
16321 be_replace_as(_after);
16323 be_replace_as(_before);
16327 if(begin+size<=_before_size)
16328 return _before->get_substr_data(begin,size);
16329 elseif(begin>=_before_size)
16330 return _after->get_substr_data(begin-_before_size,size);
16332 return base_t::get_substr_data(begin,size);
16335 if(type_info<this_t> ==
typeid(*a)){
16336 const auto p = down_cast<this_t*>(a.get());
16337 if(_before_size==p->_before_size){
16338 if(_before!=p->_before)
16339 base_t::equivalent_optimization(_before, p->_before);
16340 if(_after!=p->_after)
16341 base_t::equivalent_optimization(_after, p->_after);
16346 base_t::be_replace_as(a);
16348 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _before_size+_after_size; }
16350 virtual void copy_part_data_to(char_T* to,
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{
16351 if(pos<_before_size){
16352 const auto copy_before_begin=pos;
16353 const auto copy_before_end=
min(pos+size,_before_size);
16354 const auto copy_before_size=copy_before_end-copy_before_begin;
16355 _before->copy_part_data_to(to,copy_before_begin,copy_before_size);
16356 if(size!=copy_before_size){
16357 const auto copy_after_size=size-copy_before_size;
16358 to+=copy_before_size;
16359 _after->copy_part_data_to(to,0,copy_after_size);
16363 _after->copy_part_data_to(to,pos-_before_size,size);
16366 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
16367 if(index<_before_size)
16368 return _before->arec(index);
16370 return _after->arec(index-_before_size);
16372 virtual void arec_set(
size_t index,char_T a,
ptr_t& p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)
override final{
16373 if(this->is_unique()){
16374 if(index<_before_size)
16375 _before->arec_set(index,a,_before);
16377 _after->arec_set(index-_before_size,a,_after);
16381 base_t::arec_set(index,a,p);
16384 if(this->is_unique()){
16385 _before=_before->apply_str_to_begin(str);
16386 _before_size+=str.size();
16391 return base_t::apply_str_to_begin(str);
16394 if(this->is_unique()){
16395 _before=_before->apply_str_to_begin(str);
16396 _before_size+=str->get_size();
16401 return base_t::apply_str_to_begin(str);
16404 if(this->is_unique()){
16405 _after=_after->apply_str_to_end(str);
16406 _after_size+=str.size();
16411 return base_t::apply_str_to_end(str);
16414 if(this->is_unique()){
16415 _after=_after->apply_str_to_end(str);
16416 _after_size+=str->get_size();
16421 return base_t::apply_str_to_end(str);
16424 if(this->is_unique() && _before_size>=size){
16426 if(_before_size==size)
16427 swap(aret,_before);
16429 aret=_before->do_pop_front(size,_before);
16430 _before_size-=size;
16432 be_replace_as(_after);
16437 return base_t::do_pop_front(size,self);
16439 [[nodiscard]]
virtual ptr_t do_pop_back(
size_t size,
ptr_t& self)
noexcept(construct_nothrow&©_assign_nothrow)
override final{
16440 if(this->is_unique() && _after_size>=size){
16442 if(_before_size==size)
16445 aret=_after->do_pop_back(size,_after);
16448 be_replace_as(_before);
16453 return base_t::do_pop_back(size,self);
16460 result=_before->get_hash(_before);
16462 result=
hash.merge_array_hash_results(result,_before_size,_after->get_hash(_after),_after_size);
16465 result=_after->get_hash(_after);
16469 if(pos<_before_size){
16470 const auto calculate_before_begin=pos;
16471 const auto calculate_before_end=
min(pos+size,_before_size);
16472 const auto calculate_before_size=calculate_before_end-calculate_before_begin;
16473 before=_before->get_others_hash_with_calculated_before(before,before_size,_before,calculate_before_begin,calculate_before_size);
16474 if(size!=calculate_before_size){
16475 const auto calculate_after_size=size-calculate_before_size;
16476 before_size+=calculate_before_size;
16477 before=_after->get_others_hash_with_calculated_before(before,before_size,_after,0,calculate_after_size);
16481 before=_after->get_others_hash_with_calculated_before(before,before_size,_after,pos-_before_size,size);
16486 auto wp=down_cast<this_t*>(with.get());
16487 return _before_size==wp->_before_size;
16490 if(begin < _before_size)
16491 return _before->get_the_largest_complete_data_block_begin_form(begin);
16493 return _after->get_the_largest_complete_data_block_begin_form(begin - _before_size);
16496 auto wp=down_cast<this_t*>(with.get());
16497 if(!this->_before->equal_with(wp->_before))
16499 return this->_after->equal_with(wp->_after);
16502 auto wp=down_cast<this_t*>(with.get());
16503 if(
auto tmp=this->_before->compare_with(wp->_before); tmp!=0)
16505 return this->_after->compare_with(wp->_after);
16508 return float_size_of(*
this)+_before->get_memory_cost()+_after->get_memory_cost();
16511 template<
typename char_T>
16513 return get<sum_string_data_t<char_T>>(
this,str);
16515 template<
typename char_T>
16517 return get<sum_string_data_t<char_T>>(str,
this);
16522 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
16524 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/erased_string_data_t.hpp"
16533 template<
typename char_T>
16539 using base_t::self_changed;
16541 using base_t::copy_assign_nothrow;
16542 using base_t::copy_construct_nothrow;
16543 using base_t::move_construct_nothrow;
16544 using base_t::construct_nothrow;
16545 using base_t::destruct_nothrow;
16546 using base_t::clear_nothrow;
16547 using base_t::ptr_reset_nothrow;
16548 using base_t::hash_nothrow;
16549 using base_t::get_data_nothrow;
16550 using base_t::apply_data_nothrow;
16551 using base_t::set_hash_cache;
16559 if(_to_size==_erase_size || !_to_size)
16560 be_replace_as(null_ptr);
16563 erased_string_data_t(
ptr_t str,
size_t erase_pos,
size_t erase_size)
noexcept:_to(str),_to_size(_to->get_size()),_erase_pos(erase_pos),_erase_size(erase_size){
16564 null_equivalent_check();
16568 if(begin+size<_erase_pos)
16569 return _to->get_substr_data(begin,size);
16570 elseif(begin>_erase_pos)
16571 return _to->get_substr_data(begin+_erase_size,size);
16573 return base_t::get_substr_data(begin,size);
16576 if(type_info<this_t> ==
typeid(*a)){
16577 const auto p = down_cast<this_t*>(a.get());
16578 if(_erase_pos==p->_erase_pos && _erase_size==p->_erase_size && _to!=p->_to)
16579 base_t::equivalent_optimization(_to, p->_to);
16582 base_t::be_replace_as(a);
16584 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _to_size-_erase_size; }
16586 virtual void copy_part_data_to(char_T* to,
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{
16587 if(pos+size<_erase_pos)
16588 _to->copy_part_data_to(to,pos,size);
16590 _to->copy_part_data_to(to,pos+_erase_size,size);
16592 const auto size_before_erase_pos=_erase_pos-pos;
16593 const auto size_after_erase_pos=size-size_before_erase_pos;
16594 _to->copy_part_data_to(to,pos,size_before_erase_pos);
16595 _to->copy_part_data_to(to+size_before_erase_pos,_erase_pos+_erase_size,size_after_erase_pos);
16600 if(this->is_unique()){
16601 if(pos<=_erase_pos && pos+size>=_erase_pos+_erase_size){
16608 return base_t::do_erase(pos,size);
16610 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
16611 if(index>_erase_pos)
16612 return _to->arec(index+_erase_size);
16614 return _to->arec(index);
16617 virtual void arec_set(
size_t index,char_T a,
ptr_t& p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)
override final{
16618 if(this->is_unique()){
16619 if(index>_erase_pos)
16620 _to->arec_set(index+_erase_size,a,_to);
16622 _to->arec_set(index,a,_to);
16626 base_t::arec_set(index,a,p);
16629 if(this->is_unique()){
16630 _to=_to->apply_str_to_begin(str);
16631 const auto strsize=str.size();
16633 _erase_pos+=strsize;
16638 return base_t::apply_str_to_begin(str);
16641 if(this->is_unique()){
16642 _to=_to->apply_str_to_begin(str);
16643 const auto strsize=str->get_size();
16645 _erase_pos+=strsize;
16650 return base_t::apply_str_to_begin(str);
16653 if(this->is_unique()){
16654 _to=_to->apply_str_to_end(str);
16655 _to_size+=str.size();
16660 return base_t::apply_str_to_end(str);
16663 if(this->is_unique()){
16664 _to=_to->apply_str_to_end(str);
16665 _to_size+=str->get_size();
16670 return base_t::apply_str_to_end(str);
16673 if(this->is_unique() && _erase_pos > size){
16674 auto aret=_to->do_pop_front(size,_to);
16677 null_equivalent_check();
16682 return base_t::do_pop_front(size,self);
16684 [[nodiscard]]
virtual ptr_t do_pop_back(
size_t size,
ptr_t& self)
noexcept(construct_nothrow&©_assign_nothrow)
override final{
16685 if(this->is_unique() && _erase_pos+_erase_size <= _to_size-size){
16686 auto aret=_to->do_pop_back(size,_to);
16688 null_equivalent_check();
16693 return base_t::do_pop_back(size,self);
16698 const auto size=get_size();
16699 const auto size_before_erase_pos=_erase_pos;
16700 const auto size_after_erase_pos=size-size_before_erase_pos;
16701 result=_to->get_others_hash_with_calculated_before(result,0,_to,0,size_before_erase_pos);
16702 result=_to->get_others_hash_with_calculated_before(result,size_before_erase_pos,_to,_erase_pos+_erase_size,size_after_erase_pos);
16706 if(pos+size<_erase_pos)
16707 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos,size);
16709 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos+_erase_size,size);
16711 const auto size_before_erase_pos=_erase_pos-pos;
16712 const auto size_after_erase_pos=size-size_before_erase_pos;
16713 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos,size_before_erase_pos);
16714 before=_to->get_others_hash_with_calculated_before(before,before_size+size_before_erase_pos,_to,_erase_pos+_erase_size,size_after_erase_pos);
16720 auto wp = down_cast<this_t*>(with.get());
16721 return _erase_pos == wp->_erase_pos && _erase_size == wp->_erase_size;
16724 if(begin < _erase_pos){
16725 auto aret=_to->get_the_largest_complete_data_block_begin_form(begin);
16726 if(aret.size() > _erase_pos){
16727 aret = {aret.begin(),_erase_pos};
16732 return _to->get_the_largest_complete_data_block_begin_form(begin + _erase_size);
16735 auto wp=down_cast<this_t*>(with.get());
16736 if(!_to->equal_with(wp->_to,0,_erase_pos))
16738 return _to->equal_with(wp->_to,_erase_pos+_erase_size,_to_size);
16741 auto wp=down_cast<this_t*>(with.get());
16742 if(
auto tmp=_to->compare_with(wp->_to,0,_erase_pos); tmp!=0)
16744 return _to->compare_with(wp->_to,_erase_pos+_erase_size,_to_size);
16750 template<
typename char_T>
16752 if(size==get_size())
16755 return get<erased_string_data_t<char_T>>(
this,pos,size);
16760 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
16761 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/inserted_string_data_t.hpp"
16770 template<
typename char_T>
16776 using base_t::self_changed;
16778 using base_t::copy_assign_nothrow;
16779 using base_t::copy_construct_nothrow;
16780 using base_t::move_construct_nothrow;
16781 using base_t::construct_nothrow;
16782 using base_t::destruct_nothrow;
16783 using base_t::clear_nothrow;
16784 using base_t::ptr_reset_nothrow;
16785 using base_t::hash_nothrow;
16786 using base_t::get_data_nothrow;
16787 using base_t::apply_data_nothrow;
16788 using base_t::set_hash_cache;
16796 inserted_string_data_t(
ptr_t to,
ptr_t insert_data,
size_t insert_pos)
noexcept:_to(to),_insert_data(insert_data),_insert_pos(insert_pos),_to_size(to->get_size()),_insert_size(insert_data->get_size()){}
16799 if(begin+size<_insert_pos)
16800 return _to->get_substr_data(begin,size);
16801 elseif(begin>_insert_pos+_insert_size)
16802 return _to->get_substr_data(begin-_insert_size,size);
16803 elseif(begin>=_insert_pos && begin+size<=_insert_pos+_insert_size)
16804 return _insert_data->get_substr_data(begin-_insert_pos,size);
16806 return base_t::get_substr_data(begin,size);
16809 if(type_info<this_t> ==
typeid(*a)){
16810 const auto p = down_cast<this_t*>(a.get());
16811 if(_insert_pos==p->_insert_pos && _insert_size==p->_insert_size){
16813 base_t::equivalent_optimization(_to, p->_to);
16814 if(_insert_data!=p->_insert_data)
16815 base_t::equivalent_optimization(_insert_data, p->_insert_data);
16819 _insert_data.reset();
16820 base_t::be_replace_as(a);
16822 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _to_size+_insert_size; }
16824 virtual void copy_part_data_to(char_T* to,
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{
16825 if(pos+size<_insert_pos)
16826 _to->copy_part_data_to(to,pos,size);
16827 elseif(pos>_insert_pos+_insert_size)
16828 _to->copy_part_data_to(to,pos-_insert_size,size);
16830 if(_insert_pos>pos){
16831 auto size_before_insert_pos=_insert_pos-pos;
16832 _to->copy_part_data_to(to,pos,size_before_insert_pos);
16833 to+=size_before_insert_pos;
16834 size-=size_before_insert_pos;
16836 auto size_before_insert_end=
min(size,_insert_size);
16837 _insert_data->copy_part_data_to(to,0,size_before_insert_end);
16838 to+=size_before_insert_end;
16839 size-=size_before_insert_end;
16841 _to->copy_part_data_to(to,_insert_pos,size);
16846 if(this->is_unique()){
16847 if(pos>=_insert_pos && pos<=_insert_pos+_insert_size){
16848 _insert_data=_insert_data->do_insert(pos-_insert_pos,str);
16849 _insert_size+=str.size();
16851 elseif(pos<_insert_pos){
16852 _to=_to->do_insert(pos,str);
16853 _to_size+=str.size();
16854 _insert_pos+=str.size();
16856 elseif(pos>_insert_pos+_insert_size){
16857 _to=_to->do_insert(pos-_insert_size,str);
16858 _to_size+=str.size();
16863 return base_t::do_insert(pos,str);
16866 if(this->is_unique()){
16867 if(pos>=_insert_pos && pos+size<=_insert_pos+_insert_size){
16868 _insert_data=_insert_data->do_erase(pos-_insert_pos,size);
16869 _insert_size-=size;
16873 elseif(pos+size<_insert_pos){
16874 _to=_to->do_erase(pos,size);
16880 elseif(pos>_insert_pos+_insert_size){
16881 _to=_to->do_erase(pos-_insert_size,size);
16887 return base_t::do_erase(pos,size);
16889 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
16890 if(index>=_insert_pos && index<_insert_pos+_insert_size)
16891 return _insert_data->arec(index-_insert_pos);
16892 elseif(index>=_insert_pos+_insert_size)
16893 return _to->arec(index-_insert_size);
16895 return _to->arec(index);
16898 virtual void arec_set(
size_t index,char_T a,
ptr_t& p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)
override final{
16899 if(this->is_unique()){
16900 if(index>=_insert_pos && index<_insert_pos+_insert_size)
16901 _insert_data->arec_set(index-_insert_pos,a,p);
16902 elseif(index>=_insert_pos+_insert_size)
16903 _to->arec_set(index-_insert_size,a,p);
16905 _to->arec_set(index,a,p);
16909 base_t::arec_set(index,a,p);
16912 if(this->is_unique()){
16913 const auto size=str.size();
16914 if(_insert_pos==0){
16915 _insert_data=_insert_data->apply_str_to_begin(str);
16916 _insert_size+=size;
16919 _to=_to->apply_str_to_begin(str);
16920 _to_size+=str.size();
16927 return base_t::apply_str_to_begin(str);
16930 if(this->is_unique()){
16931 const auto size=str->get_size();
16932 if(_insert_pos==0){
16933 _insert_data=_insert_data->apply_str_to_begin(str);
16934 _insert_size+=size;
16937 _to=_to->apply_str_to_begin(str);
16938 _to_size+=str->get_size();
16945 return base_t::apply_str_to_begin(str);
16948 if(this->is_unique()){
16949 if(_insert_pos==_to_size){
16950 _insert_data=_insert_data->apply_str_to_end(str);
16951 _insert_size+=str.size();
16954 _to=_to->apply_str_to_end(str);
16955 _to_size+=str.size();
16961 return base_t::apply_str_to_end(str);
16964 if(this->is_unique()){
16965 if(_insert_pos==_to_size){
16966 _insert_data=_insert_data->apply_str_to_end(str);
16967 _insert_size+=str->get_size();
16970 _to=_to->apply_str_to_end(str);
16971 _to_size+=str->get_size();
16977 return base_t::apply_str_to_end(str);
16980 if(this->is_unique()){
16981 if(_insert_pos > size){
16982 auto aret=_to->do_pop_front(size,_to);
16988 elseif(_insert_pos==0 && _insert_size>=size){
16989 auto aret=_insert_data->do_pop_front(size,_insert_data);
16990 _insert_size-=size;
16995 return base_t::do_pop_front(size,self);
16997 [[nodiscard]]
virtual ptr_t do_pop_back(
size_t size,
ptr_t& self)
noexcept(construct_nothrow&©_assign_nothrow)
override final{
16998 if(this->is_unique()){
16999 if(_insert_pos+_insert_size <= _to_size-size){
17000 auto aret=_to->do_pop_back(size,_to);
17005 elseif(_insert_pos==_to_size && _insert_size>=size){
17006 auto aret=_insert_data->do_pop_front(size,_insert_data);
17007 _insert_size-=size;
17012 return base_t::do_pop_back(size,self);
17018 result=_to->get_others_hash_with_calculated_before(result,0,_to,0,_insert_pos);
17020 result=
hash.merge_array_hash_results(result,_insert_pos,_insert_data->get_hash(_insert_data),_insert_size);
17021 const auto size=_to_size-_insert_pos;
17023 result=_to->get_others_hash_with_calculated_before(result,_insert_pos+_insert_size,_to,_insert_pos,size);
17027 if(pos+size<_insert_pos)
17028 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos,size);
17029 elseif(pos>_insert_pos+_insert_size)
17030 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos-_insert_size,size);
17032 if(_insert_pos>pos){
17033 const auto size_before_insert_pos=_insert_pos-pos;
17034 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos,size_before_insert_pos);
17035 size-=size_before_insert_pos;
17036 before_size+=size_before_insert_pos;
17038 auto size_before_insert_end=
min(size,_insert_size);
17039 before=_insert_data->get_others_hash_with_calculated_before(before,before_size,_insert_data,0,size_before_insert_end);
17040 size-=size_before_insert_end;
17041 before_size+=size_before_insert_end;
17043 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,_insert_pos,size);
17049 auto wp=down_cast<this_t*>(with.get());
17050 return _insert_pos==wp->_insert_pos && _insert_size==wp->_insert_size;
17053 if(index>=_insert_pos && index<_insert_pos+_insert_size)
17054 return _insert_data->get_the_largest_complete_data_block_begin_form(index-_insert_pos);
17055 elseif(index>=_insert_pos+_insert_size)
17056 return _to->get_the_largest_complete_data_block_begin_form(index-_insert_size);
17058 auto aret=_to->get_the_largest_complete_data_block_begin_form(index);
17059 if(aret.size()+index > _insert_pos)
17060 aret = {aret.begin(), note::size(_insert_pos-index)};
17065 auto wp=down_cast<this_t*>(with.get());
17066 if(!_insert_data->equal_with(wp->_insert_data))
17068 return _to->equal_with(wp->_to);
17071 auto wp=down_cast<this_t*>(with.get());
17072 if(
auto tmp=_to->compare_with(wp->_to,0,_insert_pos); tmp!=0)
17074 if(
auto tmp=_insert_data->compare_with(wp->_insert_data); tmp!=0)
17076 return _to->compare_with(wp->_to,_insert_pos,_to_size-(_insert_pos+_insert_size));
17079 return float_size_of(*
this)+_insert_data->get_memory_cost()+_to->get_memory_cost();
17082 template<
typename char_T>
17084 return get<inserted_string_data_t<char_T>>(
this,str,pos);
17086 template<
typename char_T>
17089 return this->apply_str_to_begin(str);
17091 return this->apply_str_to_end(str);
17098 #line 27 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
17102 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/same_value_compress_string_data_t.hpp"
17111 template<
typename char_T>
17117 using base_t::self_changed;
17119 using base_t::copy_assign_nothrow;
17120 using base_t::copy_construct_nothrow;
17121 using base_t::move_construct_nothrow;
17122 using base_t::construct_nothrow;
17123 using base_t::destruct_nothrow;
17124 using base_t::clear_nothrow;
17125 using base_t::ptr_reset_nothrow;
17126 using base_t::hash_nothrow;
17127 using base_t::get_data_nothrow;
17128 using base_t::apply_data_nothrow;
17129 using base_t::set_hash_cache;
17137 base_t::be_replace_as(a);
17140 return get<same_value_compress_string_data_t<char_T>>(size,_value);
17142 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _size; }
17144 virtual void copy_part_data_to(char_T* to,[[maybe_unused]]
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{
17145 copy_assign[size](_value,note::to(to));
17148 [[nodiscard]]
virtual char_T
arec([[maybe_unused]]
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
17151 virtual void arec_set(
size_t index,char_T a,
ptr_t& p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)
override final{
17152 base_t::arec_set(index,a,p);
17155 if(this->is_unique()){
17161 return get<same_value_compress_string_data_t<char_T>>(_size-size,_value);
17164 if(this->is_unique()){
17170 return get<same_value_compress_string_data_t<char_T>>(_size-size,_value);
17174 return hash.repeat_times(_value,_size);
17177 return hash.merge_array_hash_results(before,before_size,
hash.repeat_times(_value,size),size);
17184 if constexpr(construct<char_T>.trivial<
const char_T&> && destruct.
trivial<char_T>){
17185 constexpr size_t data_size=512;
17186 static char_T data[data_size];
17187 if(data[0]!=_value)
17188 copy_assign[data_size](_value,note::to(data));
17189 return {data,note::size(
min(_size-begin,data_size))};
17192 return {&_value,note::size<size_t>(1)};
17195 auto wp=down_cast<this_t*>(with.get());
17196 return equal(_value,wp->_value);
17199 auto wp=down_cast<this_t*>(with.get());
17200 return compare(_value,wp->_value);
17209 #line 31 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
17214 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/defs.hpp"
17215 template<
typename char_T>
17217 static_assert(type_info<char_T> != type_info<const char_T>);
17227 static constexpr size_t npos = range_n::npos;
17231 mutable union _cso_info_t{
17237 constexpr _cso_info_t()
noexcept{}
17238 constexpr _cso_info_t(
const _cso_info_t&a)
noexcept{
17242 constexpr void operator=(
const _cso_info_t&a)
noexcept{
17245 ~_cso_info_t()
noexcept{}
17248 mutable struct _cso_flags_t{
17250 bool _str_cso_flag=0;
17254 #define _m _cso_info._mptr
17259 constexpr void _ncso_destruct_mptr()const noexcept{destruct(&
_m);}
17261 constexpr void _ncso_construct_mptr()const noexcept{construct<ptr_t>[&
_m]();}
17263 constexpr void _ncso_construct_mptr(ptr_t p)
const noexcept{construct<ptr_t>[&
_m](p);}
17268 [[nodiscard]]
bool _in_cso()const noexcept{
return _cso_flags._cso_flag;}
17269 [[nodiscard]]
bool _in_str_cso()const noexcept{
return _in_cso() && _cso_flags._str_cso_flag;}
17270 [[nodiscard]]
bool _in_chr_cso()const noexcept{
return _in_cso() && !_cso_flags._str_cso_flag;}
17273 constexpr void _set_str_cso()const noexcept{_cso_flags._cso_flag=1;_cso_flags._str_cso_flag=1;}
17274 constexpr void _set_chr_cso()const noexcept{_cso_flags._cso_flag=1;_cso_flags._str_cso_flag=0;}
17275 constexpr void _set_not_cso()const noexcept{_cso_flags._cso_flag=0;}
17279 [[nodiscard]]
const char_T* _get_cso_data()const noexcept{
return _in_str_cso()?_cso_info._str->str():&_cso_info._ch;}
17280 [[nodiscard]]
size_t _get_cso_size()const noexcept{
return _in_str_cso()?_cso_info._str->size():1;}
17281 [[nodiscard]]
hash_t _get_cso_hash()const noexcept{
return _in_str_cso()?
hash(_get_cso_constexpr_str()):
hash(_cso_info._ch);}
17282 [[nodiscard]]constexpr_str_t& _get_cso_constexpr_str()const noexcept{
return *_cso_info._str;}
17286 constexpr void _cso_init(constexpr_str_t&str)
noexcept{_set_str_cso();_cso_info._str=&str;}
17287 constexpr void _cso_reinit(constexpr_str_t&str)
noexcept{
if(!_in_cso())_ncso_destruct_mptr();_cso_init(str);}
17288 constexpr void _cso_init(char_T ch)
noexcept{_set_chr_cso();_cso_info._ch=ch;}
17289 constexpr void _cso_reinit(char_T ch)
noexcept{
if(!_in_cso())_ncso_destruct_mptr();_cso_init(ch);}
17290 void _cso_fin(
bool need_write)
const noexcept{
17291 if(_in_str_cso()&&!need_write)
17292 _ncso_construct_mptr(get<constexpr_string_data_t<char_T>>(*_cso_info._str));
17294 auto str=string_view_t{_get_cso_data(),_get_cso_size()};
17295 _ncso_construct_mptr(get<comn_string_data_t<char_T>>(str));
17299 void _cso_fin(ptr_t p)
noexcept{
17301 _ncso_construct_mptr(p);
17306 static constexpr bool the_size_worth_to_end_cso(
size_t size)
noexcept{
17307 constexpr auto max_size=
max(
sizeof(comn_string_data_t<char_T>)*2/
sizeof(char_T),(
size_t)1);
17308 return size>=max_size;
17310 static void full_copy_cso_check(
const string_t&str)
noexcept{
17311 if(the_size_worth_to_end_cso(str.size()))
17317 void _cso_check(
bool need_write=0)const noexcept{
17319 _cso_fin(need_write);
17323 string_t(ptr_t str)
noexcept{_ncso_construct_mptr(str);}
17325 [[nodiscard]]ptr_t ptr_copy()const noexcept{
17332 if(_in_cso()||a._in_cso()){
17333 swap(_cso_info,a._cso_info);
17334 swap(_cso_flags,a._cso_flags);
17348 _cso_info=str._cso_info;
17349 _cso_flags=str._cso_flags;
17352 _ncso_construct_mptr(str._m);
17358 string_t(char_T ch,
size_t size)
noexcept requires(type_info<size_t>!=type_info<char_T>):
string_t(size,ch){}
17374 full_copy_cso_check(str);
17376 return operator+(str.to_string_view_t());
17378 return ptr_copy()->apply_str_to_end(str._m);
17381 return ptr_copy()->apply_str_to_end(str);
17387 return str2.ptr_copy()->apply_str_to_begin(str1);
17410 template<
typename U>
17413 return move(*
this);
17422 return _m->get_memory_cost();
17427 if(a._in_str_cso())
17428 return operator<=>(a._get_cso_constexpr_str());
17430 return operator<=>(a.to_string_view_t());
17431 auto ssize = size();
17432 auto scom =
compare(ssize,a.size());
17435 return _m->compare_with(a._m);
17444 if(a._in_str_cso())
17445 return operator==(a._get_cso_constexpr_str());
17448 auto ssize = size();
17449 const auto seq =
equal(ssize,a.size());
17452 return _m->equal_with(a._m);
17454 return a==_get_cso_constexpr_str();
17456 return a==to_string_view_t();
17461 auto ssize = size();
17462 auto scom =
compare(ssize,a.size());
17465 return compare(data(),a.begin(),ssize);
17467 return _m->compare_with(a);
17472 auto ssize = size();
17473 const auto seq =
equal(ssize,a.size());
17476 return equal(data(),a.begin(),ssize);
17478 return _m->equal_with(a);
17483 if(_in_cso() && data()==a.str())
17484 return strong_ordering::equivalent;
17491 if(_in_cso() && data()==a.str())
17502 return _m->compare_with(a);
17508 return _m->equal_with(a);
17512 [[nodiscard]]char_T* unique_c_str()noexcept{ _cso_check(1);
return _m->get_unique_c_str(
_m); }
17514 [[nodiscard]]char_T
arec(
size_t index)
noexcept{
17516 return _get_cso_data()[index];
17518 return _m->arec(index);
17520 void arec_set(
size_t index,char_T a)
noexcept{ _cso_check(1);
return _m->arec_set(index,a,
_m); }
17530 [[nodiscard]]
operator char_T()const&&noexcept{
return _to->
arec(_index); }
17533 return move(*
this);
17537 [[nodiscard]]char_T* get_address()noexcept{
return _to->unique_c_str()+_index; }
17538 [[nodiscard]]
const char_T* get_address()const noexcept{
return (
add_const(_to))->c_str()+_index; }
17540 [[nodiscard]]char_T*
operator&()&&
noexcept{
return get_address(); }
17541 [[nodiscard]]
const char_T*
operator&()const&&noexcept{
return get_address(); }
17560 return *
this+move(ch).operator char_T();
17563 return *
this+=move(ch).operator char_T();
17569 magic_number::linear_interpolation::get_result(
declvalue(
size_t),
17573 static auto floating_arec_result_type_helper()noexcept{
17574 if constexpr(floating_arec_result_able)
17575 return magic_number::linear_interpolation::get_result(
size_t{},
17576 magic_number::linear_interpolation::get_k(char_T{},char_T{}),
17579 typedef decltype(floating_arec_result_type_helper()) floating_arec_result_type;
17581 magic_number::linear_interpolation::get_reverse_result(
17586 static constexpr bool floating_arec_able=floating_arec_result_able||floating_arec_set_able;
17595 static constexpr bool result_able=floating_arec_result_able;
17596 static constexpr bool set_able=floating_arec_set_able;
17599 _index_x1=
static_cast<size_t>(index);
17600 _index_x2=_index_x1+1;
17603 [[nodiscard]]
operator floating_arec_result_type()const&&noexcept requires result_able{
17604 char_T y1=_to->
arec(_index_x1);
17605 char_T y2=_to->
arec(_index_x2);
17606 auto δx=_index-_index_x1;
17607 return magic_number::linear_interpolation::get_result(y1,
17608 magic_number::linear_interpolation::get_k(y1,y2),
17612 char_T y1=_to->
arec(_index_x1);
17613 char_T y2=_to->
arec(_index_x2);
17614 auto k=magic_number::linear_interpolation::get_k(y1,y2);
17615 auto δx1=_index-_index_x1;
17616 auto δx2=_index-_index_x2;
17617 y1=(char_T)magic_number::linear_interpolation::get_reverse_result(k,δx1,a);
17618 y2=(char_T)magic_number::linear_interpolation::get_reverse_result(k,δx2,a);
17621 return move(*
this);
17628 template<
typename T> requires ::std::is_arithmetic_v<T>
17630 if constexpr(::std::is_floating_point_v<T>)
17631 return operator[](
static_cast<float_t>(index));
17633 return operator[](
static_cast<size_t>(index));
17635 template<
typename T> requires ::std::is_arithmetic_v<T>
17637 if constexpr(::std::is_floating_point_v<T>)
17638 return operator[](
static_cast<float_t>(index));
17640 return operator[](
static_cast<size_t>(index));
17644 size=
min(size,this->size()-begin);
17647 return _m->get_substr_data(begin,size);
17652 [[nodiscard]]
const char_T*
data()const noexcept{
if(_in_cso())
return _get_cso_data();
else return _m->get_data(
_m); }
17654 [[nodiscard]]
const char_T*
c_str()const noexcept{
if(_in_cso())
return _get_cso_data();
else return _m->get_const_c_str(
_m); }
17656 [[nodiscard]]
size_t size()const noexcept{
if(_in_cso())
return _get_cso_size();
else return _m->get_size(); }
17657 [[nodiscard]]
explicit operator bool()const noexcept{
return size(); }
17658 [[nodiscard]]
bool empty()const noexcept{
return !size(); }
17659 [[nodiscard]]
size_t length()const noexcept{
return size(); }
17661 const auto size=this->size();
17663 *
this=substr(0,nsize);
17668 _m=get<end_apply_string_data_t<char_T>>(
_m,nsize-size,ch);
17674 const auto size=this->size();
17676 *
this=substr(0,nsize);
17681 _m=get<end_apply_string_data_t<char_T>>(
_m,nsize-size);
17688 struct iterator_base_t{
17692 [[nodiscard]]
constexpr iterator_base_t get_before()const noexcept{
return{_to,_index-1}; }
17693 [[nodiscard]]
constexpr iterator_base_t get_next()const noexcept{
return{_to,_index+1}; }
17694 [[nodiscard]]arec_t get_value()noexcept{
return (*_to)[_index]; }
17695 [[nodiscard]]
const arec_t get_value()const noexcept{
return (*
add_const(_to))[_index]; }
17696 [[nodiscard]]char_T*
get_handle()noexcept{
return &get_value(); }
17697 [[nodiscard]]
const char_T*
get_handle()const noexcept{
return &get_value(); }
17698 [[nodiscard]]
constexpr bool operator==(
const iterator_base_t& a)
const noexcept{
return _to==a._to && _index==a._index; }
17699 [[nodiscard]]
constexpr auto operator<=>(
const iterator_base_t& a)
const noexcept{
return _to==a._to ? _index<=>a._index : partial_ordering::unordered; }
17701 [[nodiscard]]iterator_base_t get_iterator_data_at(ptrdiff_t index)
const noexcept{
return iterator_base_t{(
string_t*)
this,index}; }
17730 full_copy_cso_check(*
this);
17731 full_copy_cso_check(str);
17732 if(_in_cso()&&!str._in_cso())
17733 _cso_fin(str._m->apply_str_to_begin(to_string_view_t()));
17735 push_back(str.to_string_view_t());
17739 _m=
_m->apply_str_to_end(str._m);
17748 full_copy_cso_check(*
this);
17749 full_copy_cso_check(str);
17750 if(_in_cso()&&!str._in_cso())
17751 _cso_fin(str._m->apply_str_to_end(to_string_view_t()));
17753 push_front(str.to_string_view_t());
17757 _m=
_m->apply_str_to_begin(str._m);
17776 [[nodiscard]]
explicit operator hash_t()const noexcept{
return _in_cso()?_get_cso_hash():
_m->get_hash(
_m); }
17780 [[nodiscard]]
size_t find(
const char_T ch,
size_t begin=0)const noexcept(find_nothrow){
17781 return in_range_size_t(ch, to_string_view_t().substr(begin));
17784 return in_range_but_reverse_size_t(ch, to_string_view_t());
17787 return in_range_size_t(str, to_string_view_t().substr(begin));
17790 return in_range_but_reverse_size_t(str, to_string_view_t());
17793 return in_range_size_t(str, to_string_view_t().substr(begin));
17796 return in_range_but_reverse_size_t(str, to_string_view_t());
17798 [[nodiscard]]
size_t find(
const string_t&str,
size_t begin=0)const noexcept(find_nothrow){
17800 if(str._in_str_cso())
17801 return find(str._get_cso_constexpr_str(),begin);
17803 return find(str._cso_info._ch,begin);
17805 auto result = str._m->get_match_pattern_from_self(str._m).match(to_string_view_t().substr(begin));
17807 return result - data();
17813 if(str._in_str_cso())
17814 return reverse_find(str._get_cso_constexpr_str());
17816 return reverse_find(str._cso_info._ch);
17818 auto result = str._m->get_reverse_match_pattern_from_self(str._m).match(to_string_view_t());
17820 return result - data();
17826 return range_n::find_first_of_size_t(str,to_string_view_t());
17829 return range_n::find_first_of_size_t(str,to_string_view_t());
17833 if(str._in_str_cso())
17834 return find_first_of(str._get_cso_constexpr_str());
17836 return find(str._cso_info._ch);
17838 return find_first_of(str.to_string_view_t());
17847 return find(move(ch).
operator char_T());
17850 return range_n::find_first_not_of_size_t(str,to_string_view_t());
17853 return range_n::find_first_not_of_size_t(str,to_string_view_t());
17857 if(str._in_str_cso())
17858 return find_first_not_of(str._get_cso_constexpr_str());
17860 return find_first_not_of(str.to_string_view_t());
17862 return find_first_not_of(str.to_string_view_t());
17871 return find_first_not_of(
string_view_t(move(ch).
operator char_T()));
17874 return range_n::find_last_of_size_t(str,to_string_view_t());
17877 return range_n::find_last_of_size_t(str,to_string_view_t());
17881 if(str._in_str_cso())
17882 return find_last_of(str._get_cso_constexpr_str());
17884 return reverse_find(str._cso_info._ch);
17886 return find_last_of(str.to_string_view_t());
17888 [[nodiscard]]
size_t find_last_of(
const char_T*str)
const noexcept(find_nothrow){
17892 return reverse_find(ch);
17895 return reverse_find(move(ch).
operator char_T());
17898 return range_n::find_last_not_of_size_t(str,to_string_view_t());
17901 return range_n::find_last_not_of_size_t(str,to_string_view_t());
17905 if(str._in_str_cso())
17906 return find_last_not_of(str._get_cso_constexpr_str());
17908 return find_last_not_of(str.to_string_view_t());
17910 return find_last_not_of(str.to_string_view_t());
17919 return find_last_not_of(move(ch).
operator char_T());
17925 auto pos=find(delimiter);
17926 auto end=find(delimiter,pos);
17929 end=find(delimiter,pos);
17931 return substr(pos,
end-pos);
17934 auto pos=find(delimiter_str);
17935 auto end=find(delimiter_str,pos);
17938 end=find(delimiter_str,pos);
17940 return substr(pos,
end-pos);
17943 auto pos=find(delimiter_str);
17944 auto end=find(delimiter_str,pos);
17947 end=find(delimiter_str,pos);
17949 return substr(pos,
end-pos);
17952 auto pos=find(delimiter_str);
17953 auto end=find(delimiter_str,pos);
17956 end=find(delimiter_str,pos);
17958 return substr(pos,
end-pos);
17963 void erase(
size_t pos,
size_t size=1)&
noexcept{
17964 _cso_check();
_m=
_m->do_erase(pos,size);
17968 full_copy_cso_check(str);
17970 _m=
_m->do_insert(pos,str.to_string_view_t());
17972 _m=
_m->do_insert(pos,str);
17975 _cso_check();
_m=
_m->do_insert(pos,str);
17977 void insert(
size_t pos,
const char_T* str)&
noexcept{
17988 return find(str) != npos;
17991 return find(str) != npos;
17994 return find(str) != npos;
17997 return find(ch) != npos;
18000 return find(str) != npos;
18005 if(size()<str.size())
18007 return substr(0,str.size()) == str;
18010 if(size()<str.size())
18012 return substr(0,str.size()) == str;
18015 if(size()<str.size())
18017 if(str._in_chr_cso())
18018 return starts_with(str._cso_info._ch);
18020 return substr(0,str.size()) == str;
18025 return operator[](0) == ch;
18033 if(size()<str.size())
18035 return substr(size()-str.size()) == str;
18038 if(size()<str.size())
18040 return substr(size()-str.size()) == str;
18043 if(size()<str.size())
18045 if(str._in_chr_cso())
18046 return ends_with(str._cso_info._ch);
18048 return substr(size()-str.size()) == str;
18053 return operator[](size()-1) == ch;
18070 template<
class char_T>
18072 template<
class char_T>
18076 template<
typename T>
18080 template<
typename some_fucking_std_ostream,
typename T>
18081 decltype(
auto)
operator<<(some_fucking_std_ostream& stream,
const string_t<T>& str){
18082 typedef some_fucking_std_ostream stream_t;
18083 typedef stream_t::traits_type traits_t;
18084 typename stream_t::iostate state = stream_t::goodbit;
18088 size_t size = str.
size();
18089 if(stream.width() <= 0 ||
static_cast<size_t>(stream.width()) <= size)
18092 pad =
static_cast<size_t>(stream.width()) - size;
18094 const typename stream_t::sentry isok(stream);
18097 state |= stream_t::badbit;
18100 if((stream.flags() & stream_t::adjustfield) != stream_t::left){
18101 for(; 0 < pad; --pad){
18102 if(traits_t::eq_int_type(traits_t::eof(), stream.rdbuf()->sputc(stream.fill()))){
18103 state |= stream_t::badbit;
18109 if(state == stream_t::goodbit && stream.rdbuf()->sputn(str.
c_str(),
static_cast<::std::streamsize
>(size)) !=
static_cast<::std::streamsize
>(size))
18110 state |= stream_t::badbit;
18112 for(; 0 < pad; --pad){
18113 if(traits_t::eq_int_type(traits_t::eof(), stream.rdbuf()->sputc(stream.fill()))){
18114 state |= stream_t::badbit;
18123 stream.setstate(stream_t::badbit,
true);
18127 stream.setstate(state);
18142 using string_n::string_t;
18143 using string_n::string;
18147 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
18149 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
18157 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
18168 #if defined(_MSC_VER)
18169 #pragma warning(pop)
18171 #undef suppress_msvc_warning
18172 #undef disable_msvc_warning
18173 #undef push_msvc_warning
18174 #undef pop_msvc_warning
18175 #undef push_and_disable_msvc_warning
18178 #undef BIT_POSSIBILITY
18180 #if defined(ELC_VOID_NAME)
18181 #define void the_void
18186 #undef noexcept_as_auto
18187 #undef constexpr_as
18188 #undef constexpr_as_auto
18190 #undef using_method_from_base_t
18191 #undef using_method_from_value
18196 #undef re_declvalue
18201 #undef template_error
18202 #undef template_warning
18204 #undef type_info_of
18205 #undef type_name_of
18207 #undef is_common_attribute
18208 #undef is_special_attribute
18210 #undef has_attribute
18211 #undef not_has_attribute
18213 #undef float_size_of
18216 #undef def_common_attribute_with_nothing
18217 #undef def_special_attribute_with_nothing
18219 #undef common_attribute_t
18220 #undef special_attribute_t
18223 #undef enabled_by_default
18224 #undef disabled_by_default
18225 #undef enable_if_not_ill_form
18228 #undef was_an_ill_form
18229 #undef was_an_ill_form_with_parameter
18230 #undef was_not_an_ill_form
18231 #undef was_not_an_ill_form_and_noexcept
18232 #undef was_not_an_ill_form_with_parameter
18234 #undef recursive_lambda
18235 #undef get_recursive_lambda_caller
18237 #undef lambda_with_catch
18238 #undef self_recursion
18239 #undef lambda_RLSRRS
18247 #undef _small_than_
18249 #if defined(_MSC_VER)
18255 #undef INTER_NAMESPACE
18256 #undef BREAK_NAMESPACE
18261 #undef template_name
18264 #undef not_in_debug
18269 #undef ELC_TEST_EVENTNAME
18271 #undef override_instance_struct
18275 #undef force_inline
18277 #undef with_no_vtable
18279 #undef in_consteval
18281 #undef no_vtable_struct
18282 #undef no_vtable_class
18286 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
18290 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
18293 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
18306 #if !defined(ELC_APIS_str_code_convert)
18307 #define ELC_APIS_str_code_convert
18310 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/default_data_type.hpp"
18320 typedef char32_t char_t;
18322 typedef int64_t
int_t;
18324 typedef uint64_t
uint_t;
18333 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
18334 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
18343 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
18347 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
18349 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
18361 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
18363 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
18374 #define BIT_POSSIBILITY 2
18378 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
18380 #if defined(_MSC_VER)
18381 #pragma warning(push,ELC_WARNING_LEVEL)
18382 #pragma warning(disable:4099)
18383 #pragma warning(disable:26812)
18384 #pragma warning(disable:4584)
18385 #pragma warning(disable:4250)
18386 #pragma warning(disable:26432)
18387 #pragma warning(disable:26435)
18388 #pragma warning(disable:26481)
18389 #pragma warning(disable:26446)
18390 #pragma warning(disable:26434)
18391 #pragma warning(disable:26429)
18392 #pragma warning(disable:26471)
18393 #pragma warning(disable:26474)
18394 #pragma warning(disable:26473)
18395 #pragma warning(disable:26456)
18396 #pragma warning(disable:26485)
18397 #pragma warning(disable:26490)
18398 #pragma warning(disable:26472)
18399 #pragma warning(disable:26482)
18400 #pragma warning(disable:26493)
18402 #if defined(_MSC_VER)
18403 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
18404 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
18405 #define push_msvc_warning() __pragma(warning(push))
18406 #define pop_msvc_warning() __pragma(warning(pop))
18407 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
18409 #define suppress_msvc_warning(...)
18410 #define disable_msvc_warning(...)
18411 #define push_msvc_warning()
18412 #define pop_msvc_warning()
18413 #define push_and_disable_msvc_warning(...)
18416 #if defined(ELC_VOID_NAME)
18421 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
18422 #define noexcept_as_auto MAGIC
18423 #define constexpr_as(...) MAGIC constexpr
18424 #define constexpr_as_auto MAGIC MAGIC constexpr
18426 #define using_method_from_base_t(name,...) \
18427 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
18428 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
18430 return base_t::name(forward<Args>(rest)...);\
18433 #define using_method_from_value(name,value_name,...) \
18434 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
18435 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
18437 return value_name.name(forward<Args>(rest)...);\
18440 #define floop while(__builtin_is_my_dick_still_there())
18441 #define enable_adl(name) void name()noexcept=delete
18443 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
18444 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
18446 #define declvalue(...) (::std::declval<__VA_ARGS__>())
18449 #define template_error(reason) static_assert(template_error_helper<T>,reason)
18451 #define template_warning(reason) template_warning_helper<T>(reason)
18454 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
18455 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
18457 #define is_common_attribute(name) public attribute<T,name<T>>
18458 #define is_special_attribute(name) public attribute<T,name>
18460 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
18461 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
18464 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
18466 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
18469 #define def_common_attribute_with_nothing(name) \
18470 template<typename T>\
18473 #define def_special_attribute_with_nothing(name) \
18476 #define common_attribute_t template<class>class
18477 #define special_attribute_t class
18487 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
18489 #define enabled_by_default class enable_state=void
18491 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
18493 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
18495 #define enable_flag class enable_state
18497 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
18498 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
18499 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
18500 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
18501 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
18504 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
18506 #define get_recursive_lambda_caller(name) \
18507 lambda_with_catch(&)(auto&&...Args){\
18508 return name(name,Args...);\
18513 #define lambda_with_catch(...) [__VA_ARGS__]
18515 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
18517 #define lambda_RLSRRS _my_jb_super_sb_name_
18525 #define elseif else if
18527 #define _big_than_ >
18529 #define _small_than_ <
18531 #if defined(_MSC_VER)
18538 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
18540 #define BREAK_NAMESPACE }
18543 #define template_name template
18545 #define type_name class
18547 #if defined(DEBUG) || defined(_DEBUG)
18548 #define not_in_debug 0
18550 #define not_in_debug 1
18554 #define ec(ch) U ## ch
18556 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
18557 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
18559 #define ELC_TEST_EVENTNAME(name)
18562 #define override_instance_struct \
18564 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
18565 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
18566 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
18567 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
18568 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
18570 #if defined(_WIN32)
18571 #define distinctive __declspec(dllexport)
18573 #define distinctive
18576 #if defined(_WIN32)
18577 #define force_inline __forceinline
18578 #elif defined(__GNUC__)
18579 #define force_inline __attribute__((always_inline)) inline
18581 #define force_inline inline
18584 #if defined(_WIN32)
18585 #define with_no_vtable __declspec(novtable)
18587 #define with_no_vtable
18590 #define in_consteval (::std::is_constant_evaluated())
18592 #define no_vtable_struct struct with_no_vtable
18593 #define no_vtable_class class with_no_vtable
18597 #line 20 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
18601 [[nodiscard]]
inline string_t<char>
to_char_str(string_view_t<char_t> a)
noexcept{
18602 string_t<char>aret;
18603 ::std::mbstate_t stat{};
18604 string_t old_lc=::std::setlocale(LC_CTYPE,
nullptr);
18605 if(::std::setlocale(LC_CTYPE,
"en_US.utf8")==
nullptr)
18606 die_with(locale::str::setlocale_error);
18608 char r[MB_LEN_MAX];
18612 s=::std::c32rtomb(r,c,&stat);
18614 die_with(locale::str::code_convert_error);
18615 aret+=string_view_t<char>{(
char*)r,note::size((
size_t)s)};
18617 ::std::setlocale(LC_CTYPE,old_lc.c_str());
18621 string_t<char_t>aret;
18622 ::std::mbstate_t stat{};
18623 string_t old_lc=::std::setlocale(LC_CTYPE,
nullptr);
18624 if(::std::setlocale(LC_CTYPE,
"en_US.utf8")==
nullptr)
18625 die_with(locale::str::setlocale_error);
18630 auto i=a.cbegin(),e=a.cend();
18632 s=::std::mbrtoc32(&c,i,MB_LEN_MAX,&stat);
18634 die_with(locale::str::code_convert_error);
18638 ::std::setlocale(LC_CTYPE,old_lc.c_str());
18642 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
18653 #if defined(_MSC_VER)
18654 #pragma warning(pop)
18656 #undef suppress_msvc_warning
18657 #undef disable_msvc_warning
18658 #undef push_msvc_warning
18659 #undef pop_msvc_warning
18660 #undef push_and_disable_msvc_warning
18663 #undef BIT_POSSIBILITY
18665 #if defined(ELC_VOID_NAME)
18666 #define void the_void
18671 #undef noexcept_as_auto
18672 #undef constexpr_as
18673 #undef constexpr_as_auto
18675 #undef using_method_from_base_t
18676 #undef using_method_from_value
18681 #undef re_declvalue
18686 #undef template_error
18687 #undef template_warning
18689 #undef type_info_of
18690 #undef type_name_of
18692 #undef is_common_attribute
18693 #undef is_special_attribute
18695 #undef has_attribute
18696 #undef not_has_attribute
18698 #undef float_size_of
18701 #undef def_common_attribute_with_nothing
18702 #undef def_special_attribute_with_nothing
18704 #undef common_attribute_t
18705 #undef special_attribute_t
18708 #undef enabled_by_default
18709 #undef disabled_by_default
18710 #undef enable_if_not_ill_form
18713 #undef was_an_ill_form
18714 #undef was_an_ill_form_with_parameter
18715 #undef was_not_an_ill_form
18716 #undef was_not_an_ill_form_and_noexcept
18717 #undef was_not_an_ill_form_with_parameter
18719 #undef recursive_lambda
18720 #undef get_recursive_lambda_caller
18722 #undef lambda_with_catch
18723 #undef self_recursion
18724 #undef lambda_RLSRRS
18732 #undef _small_than_
18734 #if defined(_MSC_VER)
18740 #undef INTER_NAMESPACE
18741 #undef BREAK_NAMESPACE
18746 #undef template_name
18749 #undef not_in_debug
18754 #undef ELC_TEST_EVENTNAME
18756 #undef override_instance_struct
18760 #undef force_inline
18762 #undef with_no_vtable
18764 #undef in_consteval
18766 #undef no_vtable_struct
18767 #undef no_vtable_class
18771 #line 65 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
18780 #line 19 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
18782 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
18790 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
18802 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
18804 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
18815 #define BIT_POSSIBILITY 2
18819 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
18821 #if defined(_MSC_VER)
18822 #pragma warning(push,ELC_WARNING_LEVEL)
18823 #pragma warning(disable:4099)
18824 #pragma warning(disable:26812)
18825 #pragma warning(disable:4584)
18826 #pragma warning(disable:4250)
18827 #pragma warning(disable:26432)
18828 #pragma warning(disable:26435)
18829 #pragma warning(disable:26481)
18830 #pragma warning(disable:26446)
18831 #pragma warning(disable:26434)
18832 #pragma warning(disable:26429)
18833 #pragma warning(disable:26471)
18834 #pragma warning(disable:26474)
18835 #pragma warning(disable:26473)
18836 #pragma warning(disable:26456)
18837 #pragma warning(disable:26485)
18838 #pragma warning(disable:26490)
18839 #pragma warning(disable:26472)
18840 #pragma warning(disable:26482)
18841 #pragma warning(disable:26493)
18843 #if defined(_MSC_VER)
18844 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
18845 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
18846 #define push_msvc_warning() __pragma(warning(push))
18847 #define pop_msvc_warning() __pragma(warning(pop))
18848 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
18850 #define suppress_msvc_warning(...)
18851 #define disable_msvc_warning(...)
18852 #define push_msvc_warning()
18853 #define pop_msvc_warning()
18854 #define push_and_disable_msvc_warning(...)
18857 #if defined(ELC_VOID_NAME)
18862 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
18863 #define noexcept_as_auto MAGIC
18864 #define constexpr_as(...) MAGIC constexpr
18865 #define constexpr_as_auto MAGIC MAGIC constexpr
18867 #define using_method_from_base_t(name,...) \
18868 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
18869 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
18871 return base_t::name(forward<Args>(rest)...);\
18874 #define using_method_from_value(name,value_name,...) \
18875 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
18876 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
18878 return value_name.name(forward<Args>(rest)...);\
18881 #define floop while(__builtin_is_my_dick_still_there())
18882 #define enable_adl(name) void name()noexcept=delete
18884 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
18885 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
18887 #define declvalue(...) (::std::declval<__VA_ARGS__>())
18890 #define template_error(reason) static_assert(template_error_helper<T>,reason)
18892 #define template_warning(reason) template_warning_helper<T>(reason)
18895 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
18896 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
18898 #define is_common_attribute(name) public attribute<T,name<T>>
18899 #define is_special_attribute(name) public attribute<T,name>
18901 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
18902 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
18905 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
18907 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
18910 #define def_common_attribute_with_nothing(name) \
18911 template<typename T>\
18914 #define def_special_attribute_with_nothing(name) \
18917 #define common_attribute_t template<class>class
18918 #define special_attribute_t class
18928 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
18930 #define enabled_by_default class enable_state=void
18932 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
18934 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
18936 #define enable_flag class enable_state
18938 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
18939 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
18940 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
18941 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
18942 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
18945 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
18947 #define get_recursive_lambda_caller(name) \
18948 lambda_with_catch(&)(auto&&...Args){\
18949 return name(name,Args...);\
18954 #define lambda_with_catch(...) [__VA_ARGS__]
18956 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
18958 #define lambda_RLSRRS _my_jb_super_sb_name_
18966 #define elseif else if
18968 #define _big_than_ >
18970 #define _small_than_ <
18972 #if defined(_MSC_VER)
18979 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
18981 #define BREAK_NAMESPACE }
18984 #define template_name template
18986 #define type_name class
18988 #if defined(DEBUG) || defined(_DEBUG)
18989 #define not_in_debug 0
18991 #define not_in_debug 1
18995 #define ec(ch) U ## ch
18997 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
18998 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
19000 #define ELC_TEST_EVENTNAME(name)
19003 #define override_instance_struct \
19005 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
19006 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
19007 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
19008 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
19009 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
19011 #if defined(_WIN32)
19012 #define distinctive __declspec(dllexport)
19014 #define distinctive
19017 #if defined(_WIN32)
19018 #define force_inline __forceinline
19019 #elif defined(__GNUC__)
19020 #define force_inline __attribute__((always_inline)) inline
19022 #define force_inline inline
19025 #if defined(_WIN32)
19026 #define with_no_vtable __declspec(novtable)
19028 #define with_no_vtable
19031 #define in_consteval (::std::is_constant_evaluated())
19033 #define no_vtable_struct struct with_no_vtable
19034 #define no_vtable_class class with_no_vtable
19038 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
19042 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
19044 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/literal.hpp"
19053 namespace string_n{
19054 template<constexpr_str_n::constexpr_str_t_literal_helper str_helper>
19055 inline constexpr string operator""_elc_string()noexcept{
19056 return string(constexpr_str_n::operator
""_constexpr_str<str_helper>());
19059 using string_n::operator
""_elc_string;
19063 #line 23 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
19065 #if defined(ELC_TEST_ON)
19066 namespace string_part_test{
19067 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_test.hpp"
19075 inline void test(){
19080 stest_accert(a.size()==0);
19082 stest_accert(a.size()==3);
19084 stest_accert(a.size()==6);
19086 stest_accert(
es"asd"+a==
es"asdasdasdasd");
19088 stest_accert(a.substr(0,3)==
es"aed");
19089 stest_accert(a.substr(3).size()==6);
19090 stest_accert(a[2]==
ec(
'd'));
19092 stest_accert(a.size()==0);
19093 a.resize(3,
ec(
'd'));
19094 stest_accert(a==
es"ddd");
19096 stest_accert(c==
ec(
'd'));
19098 stest_accert(a.begin()==a.cbegin());
19099 stest_accert(*a.begin()==
ec(
'a'));
19100 stest_accert(a.begin()<=a.cend());
19101 stest_accert(*a.rbegin()==
ec(
'c'));
19102 stest_accert(a.rbegin()<=a.rend());
19103 stest_accert(a.rbegin()==a.end()-1);
19104 a.push_back(
es"as");
19105 a.push_front(
ec(
'p'));
19106 stest_accert(a ==
es"pabcas");
19109 stest_accert(a ==
es"ps");
19110 stest_accert(a.pop_front() ==
ec(
'p'));
19111 stest_accert(a.pop_back() ==
ec(
's'));
19112 stest_accert(a.size() == 0);
19114 stest_accert(a.pop_back(2) ==
es"bc");
19115 stest_accert(a.size() == 1);
19116 a.push_front(
es"wqer");
19117 stest_accert(a==
es"wqera");
19118 a.insert(2,
es"123");
19119 a.insert(0,
es"123");
19120 a.insert(a.size(),
es"123");
19121 stest_accert(a[2] ==
ec(
'3'));
19126 stest_accert(a ==
es"123wq6666ra123");
19127 for(
char_t& c: a.view())
19129 stest_accert(a ==
es"77777777777777");
19132 using namespace elc;
19133 using elc::defs::hash;
19134 auto a =
es"ab"_elc_string;
19135 stest_accert(
hash(a) ==
hash(string_view(
es"ab")));
19137 stest_accert(
hash(b) ==
hash(string_view(
es"ab")));
19138 stest_accert(b.memory_cost() > a.memory_cost());
19141 stest_accert(
hash(a) ==
hash(string_view(
es"abab")));
19143 stest_accert(
hash(a) ==
hash(string_view(
es"acbab")));
19145 stest_accert(
hash(a) ==
hash(string_view(
es"ac")));
19146 a.push_back(
es"123");
19147 stest_accert(
hash(a) ==
hash(string_view(
es"ac123")));
19148 a.push_front(
es"123");
19149 stest_accert(
hash(a) ==
hash(string_view(
es"123ac123")));
19152 check_memory_lack();
19154 inline void test_log_out(){
19156 inline void test_end(){
19161 #line 27 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
19165 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
19173 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
19184 #if defined(_MSC_VER)
19185 #pragma warning(pop)
19187 #undef suppress_msvc_warning
19188 #undef disable_msvc_warning
19189 #undef push_msvc_warning
19190 #undef pop_msvc_warning
19191 #undef push_and_disable_msvc_warning
19194 #undef BIT_POSSIBILITY
19196 #if defined(ELC_VOID_NAME)
19197 #define void the_void
19202 #undef noexcept_as_auto
19203 #undef constexpr_as
19204 #undef constexpr_as_auto
19206 #undef using_method_from_base_t
19207 #undef using_method_from_value
19212 #undef re_declvalue
19217 #undef template_error
19218 #undef template_warning
19220 #undef type_info_of
19221 #undef type_name_of
19223 #undef is_common_attribute
19224 #undef is_special_attribute
19226 #undef has_attribute
19227 #undef not_has_attribute
19229 #undef float_size_of
19232 #undef def_common_attribute_with_nothing
19233 #undef def_special_attribute_with_nothing
19235 #undef common_attribute_t
19236 #undef special_attribute_t
19239 #undef enabled_by_default
19240 #undef disabled_by_default
19241 #undef enable_if_not_ill_form
19244 #undef was_an_ill_form
19245 #undef was_an_ill_form_with_parameter
19246 #undef was_not_an_ill_form
19247 #undef was_not_an_ill_form_and_noexcept
19248 #undef was_not_an_ill_form_with_parameter
19250 #undef recursive_lambda
19251 #undef get_recursive_lambda_caller
19253 #undef lambda_with_catch
19254 #undef self_recursion
19255 #undef lambda_RLSRRS
19263 #undef _small_than_
19265 #if defined(_MSC_VER)
19271 #undef INTER_NAMESPACE
19272 #undef BREAK_NAMESPACE
19277 #undef template_name
19280 #undef not_in_debug
19285 #undef ELC_TEST_EVENTNAME
19287 #undef override_instance_struct
19291 #undef force_inline
19293 #undef with_no_vtable
19295 #undef in_consteval
19297 #undef no_vtable_struct
19298 #undef no_vtable_class
19302 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
19306 #line 31 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
19309 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_export.hpp"
19318 #define export using defs::
19323 export operator""_elc_string;
19324 export operator""_constexpr_str;
19329 #line 34 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
19331 #if defined(ELC_CORE)
19332 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_multi/string_arec_as_value.hpp"
19343 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
19351 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
19363 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
19365 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
19376 #define BIT_POSSIBILITY 2
19380 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
19382 #if defined(_MSC_VER)
19383 #pragma warning(push,ELC_WARNING_LEVEL)
19384 #pragma warning(disable:4099)
19385 #pragma warning(disable:26812)
19386 #pragma warning(disable:4584)
19387 #pragma warning(disable:4250)
19388 #pragma warning(disable:26432)
19389 #pragma warning(disable:26435)
19390 #pragma warning(disable:26481)
19391 #pragma warning(disable:26446)
19392 #pragma warning(disable:26434)
19393 #pragma warning(disable:26429)
19394 #pragma warning(disable:26471)
19395 #pragma warning(disable:26474)
19396 #pragma warning(disable:26473)
19397 #pragma warning(disable:26456)
19398 #pragma warning(disable:26485)
19399 #pragma warning(disable:26490)
19400 #pragma warning(disable:26472)
19401 #pragma warning(disable:26482)
19402 #pragma warning(disable:26493)
19404 #if defined(_MSC_VER)
19405 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
19406 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
19407 #define push_msvc_warning() __pragma(warning(push))
19408 #define pop_msvc_warning() __pragma(warning(pop))
19409 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
19411 #define suppress_msvc_warning(...)
19412 #define disable_msvc_warning(...)
19413 #define push_msvc_warning()
19414 #define pop_msvc_warning()
19415 #define push_and_disable_msvc_warning(...)
19418 #if defined(ELC_VOID_NAME)
19423 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
19424 #define noexcept_as_auto MAGIC
19425 #define constexpr_as(...) MAGIC constexpr
19426 #define constexpr_as_auto MAGIC MAGIC constexpr
19428 #define using_method_from_base_t(name,...) \
19429 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
19430 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
19432 return base_t::name(forward<Args>(rest)...);\
19435 #define using_method_from_value(name,value_name,...) \
19436 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
19437 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
19439 return value_name.name(forward<Args>(rest)...);\
19442 #define floop while(__builtin_is_my_dick_still_there())
19443 #define enable_adl(name) void name()noexcept=delete
19445 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
19446 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
19448 #define declvalue(...) (::std::declval<__VA_ARGS__>())
19451 #define template_error(reason) static_assert(template_error_helper<T>,reason)
19453 #define template_warning(reason) template_warning_helper<T>(reason)
19456 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
19457 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
19459 #define is_common_attribute(name) public attribute<T,name<T>>
19460 #define is_special_attribute(name) public attribute<T,name>
19462 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
19463 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
19466 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
19468 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
19471 #define def_common_attribute_with_nothing(name) \
19472 template<typename T>\
19475 #define def_special_attribute_with_nothing(name) \
19478 #define common_attribute_t template<class>class
19479 #define special_attribute_t class
19489 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
19491 #define enabled_by_default class enable_state=void
19493 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
19495 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
19497 #define enable_flag class enable_state
19499 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
19500 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
19501 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
19502 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
19503 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
19506 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
19508 #define get_recursive_lambda_caller(name) \
19509 lambda_with_catch(&)(auto&&...Args){\
19510 return name(name,Args...);\
19515 #define lambda_with_catch(...) [__VA_ARGS__]
19517 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
19519 #define lambda_RLSRRS _my_jb_super_sb_name_
19527 #define elseif else if
19529 #define _big_than_ >
19531 #define _small_than_ <
19533 #if defined(_MSC_VER)
19540 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
19542 #define BREAK_NAMESPACE }
19545 #define template_name template
19547 #define type_name class
19549 #if defined(DEBUG) || defined(_DEBUG)
19550 #define not_in_debug 0
19552 #define not_in_debug 1
19556 #define ec(ch) U ## ch
19558 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
19559 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
19561 #define ELC_TEST_EVENTNAME(name)
19564 #define override_instance_struct \
19566 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
19567 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
19568 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
19569 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
19570 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
19572 #if defined(_WIN32)
19573 #define distinctive __declspec(dllexport)
19575 #define distinctive
19578 #if defined(_WIN32)
19579 #define force_inline __forceinline
19580 #elif defined(__GNUC__)
19581 #define force_inline __attribute__((always_inline)) inline
19583 #define force_inline inline
19586 #if defined(_WIN32)
19587 #define with_no_vtable __declspec(novtable)
19589 #define with_no_vtable
19592 #define in_consteval (::std::is_constant_evaluated())
19594 #define no_vtable_struct struct with_no_vtable
19595 #define no_vtable_class class with_no_vtable
19599 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
19603 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_multi/string_arec_as_value.hpp"
19605 namespace string_n{
19606 template<
class char_T>
19608 size_t i=size_t(use_as<int_t>(index));
19610 i=size_t(use_as<uint_t>(index));
19611 struct arec_data_t final:instance_struct<arec_data_t>
19612 ,value::base_data_t{
19615 arec_data_t(
const arec_data_t&ref)
noexcept:
_m(
special_init,ref._m){}
19616 virtual ~arec_data_t()
noexcept override final=
default;
19618 virtual void be_set(ptr a)
noexcept override final{move(
_m)=use_as<char_T>(a);}
19619 [[nodiscard]]
virtual ptr get_value()
noexcept override final{
return core::make_binary_node_from<char_T>(move(
_m));}
19620 [[nodiscard]]
virtual base_data_t*copy()
const noexcept override final{
return get<arec_data_t>(*
this);}
19621 [[nodiscard]]
virtual base_type_info_t get_type_info()
const noexcept override final{
return type_info<arec_data_t>;}
19623 return get<arec_data_t>(str,i);
19627 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
19635 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
19646 #if defined(_MSC_VER)
19647 #pragma warning(pop)
19649 #undef suppress_msvc_warning
19650 #undef disable_msvc_warning
19651 #undef push_msvc_warning
19652 #undef pop_msvc_warning
19653 #undef push_and_disable_msvc_warning
19656 #undef BIT_POSSIBILITY
19658 #if defined(ELC_VOID_NAME)
19659 #define void the_void
19664 #undef noexcept_as_auto
19665 #undef constexpr_as
19666 #undef constexpr_as_auto
19668 #undef using_method_from_base_t
19669 #undef using_method_from_value
19674 #undef re_declvalue
19679 #undef template_error
19680 #undef template_warning
19682 #undef type_info_of
19683 #undef type_name_of
19685 #undef is_common_attribute
19686 #undef is_special_attribute
19688 #undef has_attribute
19689 #undef not_has_attribute
19691 #undef float_size_of
19694 #undef def_common_attribute_with_nothing
19695 #undef def_special_attribute_with_nothing
19697 #undef common_attribute_t
19698 #undef special_attribute_t
19701 #undef enabled_by_default
19702 #undef disabled_by_default
19703 #undef enable_if_not_ill_form
19706 #undef was_an_ill_form
19707 #undef was_an_ill_form_with_parameter
19708 #undef was_not_an_ill_form
19709 #undef was_not_an_ill_form_and_noexcept
19710 #undef was_not_an_ill_form_with_parameter
19712 #undef recursive_lambda
19713 #undef get_recursive_lambda_caller
19715 #undef lambda_with_catch
19716 #undef self_recursion
19717 #undef lambda_RLSRRS
19725 #undef _small_than_
19727 #if defined(_MSC_VER)
19733 #undef INTER_NAMESPACE
19734 #undef BREAK_NAMESPACE
19739 #undef template_name
19742 #undef not_in_debug
19747 #undef ELC_TEST_EVENTNAME
19749 #undef override_instance_struct
19753 #undef force_inline
19755 #undef with_no_vtable
19757 #undef in_consteval
19759 #undef no_vtable_struct
19760 #undef no_vtable_class
19764 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
19768 #line 35 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_multi/string_arec_as_value.hpp"
19773 #line 37 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
19778 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
19783 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/lib_loader"
19784 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
19793 #if defined(ELC_TEST)
19794 #error "this part cannot be tested."
19797 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
19810 #line 70 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
19814 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
19815 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/library_load.hpp"
19828 #if !defined(ELC_APIS_library_load)
19829 #define ELC_APIS_library_load
19830 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/_tools/decl_system_type.hpp"
19842 #if defined(__linux)||defined(__linux__)||defined(__gnu_linux__)
19843 #define SYSTEM_TYPE linux
19844 #elif defined(_WIN32)||defined(__MINGW32__)||defined(__CYGWIN__)
19845 #define SYSTEM_TYPE windows
19847 #define SYSTEM_TYPE other
19849 #define ERROR_MSG_UNABLE_OS "Unable OS,edit this file on your own or contact ELC's producers."
19853 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/library_load.hpp"
19854 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
19863 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
19867 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/library_load.hpp"
19868 #if SYSTEM_TYPE == linux
19870 #elif SYSTEM_TYPE == windows
19872 #include <Windows.h>
19873 #include <Libloaderapi.h>
19874 #include <Errhandlingapi.h>
19876 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/numerical_representation"
19885 #if !defined(ELC_NUMERICAL_REPRESENTATION)
19886 #define ELC_NUMERICAL_REPRESENTATION
19887 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
19896 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
19900 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/numerical_representation"
19901 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/_body.hpp"
19910 #if defined(ELC_TEST)
19911 #error "this part cannot be tested."
19914 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
19922 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
19934 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
19936 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
19947 #define BIT_POSSIBILITY 2
19951 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
19953 #if defined(_MSC_VER)
19954 #pragma warning(push,ELC_WARNING_LEVEL)
19955 #pragma warning(disable:4099)
19956 #pragma warning(disable:26812)
19957 #pragma warning(disable:4584)
19958 #pragma warning(disable:4250)
19959 #pragma warning(disable:26432)
19960 #pragma warning(disable:26435)
19961 #pragma warning(disable:26481)
19962 #pragma warning(disable:26446)
19963 #pragma warning(disable:26434)
19964 #pragma warning(disable:26429)
19965 #pragma warning(disable:26471)
19966 #pragma warning(disable:26474)
19967 #pragma warning(disable:26473)
19968 #pragma warning(disable:26456)
19969 #pragma warning(disable:26485)
19970 #pragma warning(disable:26490)
19971 #pragma warning(disable:26472)
19972 #pragma warning(disable:26482)
19973 #pragma warning(disable:26493)
19975 #if defined(_MSC_VER)
19976 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
19977 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
19978 #define push_msvc_warning() __pragma(warning(push))
19979 #define pop_msvc_warning() __pragma(warning(pop))
19980 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
19982 #define suppress_msvc_warning(...)
19983 #define disable_msvc_warning(...)
19984 #define push_msvc_warning()
19985 #define pop_msvc_warning()
19986 #define push_and_disable_msvc_warning(...)
19989 #if defined(ELC_VOID_NAME)
19994 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
19995 #define noexcept_as_auto MAGIC
19996 #define constexpr_as(...) MAGIC constexpr
19997 #define constexpr_as_auto MAGIC MAGIC constexpr
19999 #define using_method_from_base_t(name,...) \
20000 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
20001 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
20003 return base_t::name(forward<Args>(rest)...);\
20006 #define using_method_from_value(name,value_name,...) \
20007 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
20008 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
20010 return value_name.name(forward<Args>(rest)...);\
20013 #define floop while(__builtin_is_my_dick_still_there())
20014 #define enable_adl(name) void name()noexcept=delete
20016 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
20017 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
20019 #define declvalue(...) (::std::declval<__VA_ARGS__>())
20022 #define template_error(reason) static_assert(template_error_helper<T>,reason)
20024 #define template_warning(reason) template_warning_helper<T>(reason)
20027 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
20028 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
20030 #define is_common_attribute(name) public attribute<T,name<T>>
20031 #define is_special_attribute(name) public attribute<T,name>
20033 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
20034 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
20037 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
20039 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
20042 #define def_common_attribute_with_nothing(name) \
20043 template<typename T>\
20046 #define def_special_attribute_with_nothing(name) \
20049 #define common_attribute_t template<class>class
20050 #define special_attribute_t class
20060 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
20062 #define enabled_by_default class enable_state=void
20064 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
20066 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
20068 #define enable_flag class enable_state
20070 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
20071 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
20072 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
20073 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
20074 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
20077 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
20079 #define get_recursive_lambda_caller(name) \
20080 lambda_with_catch(&)(auto&&...Args){\
20081 return name(name,Args...);\
20086 #define lambda_with_catch(...) [__VA_ARGS__]
20088 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
20090 #define lambda_RLSRRS _my_jb_super_sb_name_
20098 #define elseif else if
20100 #define _big_than_ >
20102 #define _small_than_ <
20104 #if defined(_MSC_VER)
20111 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
20113 #define BREAK_NAMESPACE }
20116 #define template_name template
20118 #define type_name class
20120 #if defined(DEBUG) || defined(_DEBUG)
20121 #define not_in_debug 0
20123 #define not_in_debug 1
20127 #define ec(ch) U ## ch
20129 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
20130 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
20132 #define ELC_TEST_EVENTNAME(name)
20135 #define override_instance_struct \
20137 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
20138 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
20139 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
20140 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
20141 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
20143 #if defined(_WIN32)
20144 #define distinctive __declspec(dllexport)
20146 #define distinctive
20149 #if defined(_WIN32)
20150 #define force_inline __forceinline
20151 #elif defined(__GNUC__)
20152 #define force_inline __attribute__((always_inline)) inline
20154 #define force_inline inline
20157 #if defined(_WIN32)
20158 #define with_no_vtable __declspec(novtable)
20160 #define with_no_vtable
20163 #define in_consteval (::std::is_constant_evaluated())
20165 #define no_vtable_struct struct with_no_vtable
20166 #define no_vtable_class class with_no_vtable
20170 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
20174 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/_body.hpp"
20176 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/defs.hpp"
20188 struct base_numerical_representation_t{};
20192 class numerical_representation_t:
public base_numerical_representation_t{
20194 string _radix_table=
es"0123456789"_constexpr_str;
20198 string _nan=
es"NaN"_constexpr_str;
20199 string _signaling_nan=
es"signaling_NaN"_constexpr_str;
20200 string _quiet_nan=
es"quiet_NaN"_constexpr_str;
20201 string _inf=
es"Inf"_constexpr_str;
20202 char_t _unknown_data_start_sign=
ec(
'[');
20203 char_t _unknown_data_split_sign=
ec(
',');
20204 char_t _unknown_data_end_sign=
ec(
']');
20206 numerical_representation_t()
noexcept=
default;
20207 numerical_representation_t(
const numerical_representation_t&)
noexcept=
default;
20208 numerical_representation_t(numerical_representation_t&&)
noexcept=
default;
20209 numerical_representation_t(
size_t radix,
string radix_table,
20212 string nan,
string signaling_nan,
string quiet_nan,
20214 char_t unknown_data_start_sign,
char_t unknown_data_split_sign,
char_t unknown_data_end_sign
20216 _radix(radix),_radix_table(radix_table),
20217 _fractional_sign(fractional_sign),
20218 _positive_sign(positive_sign),_negative_sign(negative_sign),
20219 _nan(nan),_signaling_nan(signaling_nan),_quiet_nan(quiet_nan),
20221 _unknown_data_start_sign(unknown_data_start_sign),_unknown_data_split_sign(unknown_data_split_sign),_unknown_data_end_sign(unknown_data_end_sign)
20223 numerical_representation_t(
size_t radix,
string radix_table)
noexcept:
20225 _radix_table(radix_table)
20228 void set_radix(
size_t radix)
noexcept{
20231 void set_radix_table(
string radix_table)
noexcept{
20232 _radix_table=radix_table;
20233 _radix=radix_table.size();
20235 void set_fractional_sign(
char_t point)
noexcept{
20236 _fractional_sign=point;
20238 void set_positive_sign(
char_t positive_sign)
noexcept{
20239 _positive_sign=positive_sign;
20241 void set_negative_sign(
char_t negative_sign)
noexcept{
20242 _negative_sign=negative_sign;
20244 void set_nan(
string nan)
noexcept{
20247 void set_inf(
string inf)
noexcept{
20250 [[nodiscard]]
constexpr size_t radix()
const noexcept{
20253 [[nodiscard]]
string radix_table()
const noexcept{
20254 return _radix_table;
20256 [[nodiscard]]
constexpr char_t fractional_sign()
const noexcept{
20257 return _fractional_sign;
20259 [[nodiscard]]
constexpr char_t positive_sign()
const noexcept{
20260 return _positive_sign;
20262 [[nodiscard]]
constexpr char_t negative_sign()
const noexcept{
20263 return _negative_sign;
20265 [[nodiscard]]
string nan()
const noexcept{
20268 [[nodiscard]]
string inf()
const noexcept{
20273 inline size_t get_info_tail_size_per_byte()
const noexcept{
20275 const auto info_threshold = to_size_t(ceil(log(info_threshold_base, _radix)));
20276 return info_threshold;
20278 template<
typename T>
20279 inline size_t get_info_tail_size()
const noexcept{
20280 return get_info_tail_size_per_byte()*
sizeof(T);
20282 template<
typename T>
20283 inline string get_info_tail(T x)
const noexcept{
20284 auto info_tail_size_per_byte = get_info_tail_size_per_byte();
20286 data_view<const T> view{&x};
20287 for(
const byte c: view){
20288 auto s= to_string_rough((
unsigned char)c);
20289 aret+=
string{info_tail_size_per_byte-s.size(),_radix_table[0]}+s;
20293 template<
typename T>
20294 inline T get_from_info_tail(
string str)
const noexcept{
20295 const auto info_tail_size_per_byte = get_info_tail_size_per_byte();
20297 data_view<T> view{&aret};
20299 auto s=str.substr(0,info_tail_size_per_byte);
20300 c=(byte)from_string_get<unsigned char>(s);
20301 str=str.substr(info_tail_size_per_byte);
20305 template<
typename T>
20306 inline string to_string_num_base(T num)
const noexcept{
20307 if constexpr(::std::is_floating_point_v<T>){
20310 size_t order_of_magnitude;
20312 order_of_magnitude = to_size_t(floor(log(num,_radix)+1));
20314 order_of_magnitude = 0;
20315 aret=_radix_table[0];
20316 aret+=_fractional_sign;
20318 num/=pow(_radix,order_of_magnitude);
20320 aret=_radix_table[to_size_t(num)];
20326 auto info_threshold = to_size_t(ceil(log(info_threshold_base,_radix)));
20328 bool is_mantissa_begined =
false;
20332 T first_char_index;
20333 num=::std::modf(num,&first_char_index);
20334 aret+=_radix_table[to_size_t(first_char_index)];
20336 if(to_size_t(first_char_index))
20337 is_mantissa_begined =
true;
20338 if(is_mantissa_begined){
20343 if(order_of_magnitude){
20344 if(!--order_of_magnitude)
20345 aret+=_fractional_sign;
20348 if(!info_threshold && !order_of_magnitude)
20351 if(order_of_magnitude)
20352 aret.append(order_of_magnitude,_radix_table[0]);
20353 if(aret.ends_with(_fractional_sign))
20360 const auto first_char_index = mod(num,_radix);
20362 aret.push_front(_radix_table[(
size_t)first_char_index]);
20367 template<
typename T>
20368 inline bool to_string_special_value_check(T num,
string&str,
bool is_negative)
const noexcept{
20369 if constexpr(::std::numeric_limits<T>::has_signaling_NaN || ::std::numeric_limits<T>::has_quiet_NaN){
20370 if(::std::isnan(num)){
20371 if constexpr(::std::numeric_limits<T>::has_signaling_NaN){
20372 constexpr auto signaling_NaN = ::std::numeric_limits<T>::signaling_NaN();
20373 if(full_equal_in_byte(signaling_NaN,num)){
20374 str=_signaling_nan;
20377 auto negative_signaling_NaN = copy_as_negative(signaling_NaN);
20378 if(full_equal_in_byte(negative_signaling_NaN,num)){
20379 str=_negative_sign+_signaling_nan;
20383 if constexpr(::std::numeric_limits<T>::has_quiet_NaN){
20384 constexpr auto quiet_NaN = ::std::numeric_limits<T>::quiet_NaN();
20385 if(full_equal_in_byte(quiet_NaN,num)){
20389 auto negative_quiet_NaN = copy_as_negative(quiet_NaN);
20390 if(full_equal_in_byte(negative_quiet_NaN,num)){
20391 str=_negative_sign+_quiet_nan;
20395 str=_nan+_unknown_data_start_sign;
20396 data_view<T> view{&num};
20397 for(
const byte c: view){
20398 str += to_string_rough((
unsigned char)c);
20399 str += _unknown_data_split_sign;
20401 str.back() = _unknown_data_end_sign;
20405 if constexpr(::std::numeric_limits<T>::has_infinity){
20406 if(::std::isinf(num)){
20407 if constexpr(!::std::is_unsigned_v<T>)
20409 str=_negative_sign+_inf;
20418 template<
typename T> requires ::std::is_arithmetic_v<T>
20419 inline string to_string_rough_no_special_value_check(T num)
const noexcept{
20421 const bool is_negative=magic_number::is_negative(num);
20422 typedef decltype(
lambda{
20423 if constexpr(::std::is_unsigned_v<T>||::std::is_floating_point_v<T>)
20426 return::std::make_unsigned_t<T>();
20430 if constexpr(!::std::is_unsigned_v<T>)
20432 aret=_negative_sign;
20435 aret+=to_string_num_base(unum);
20439 template<
typename T> requires ::std::is_arithmetic_v<T>
20440 inline string to_string_rough(T num)
const noexcept{
20442 const bool is_negative=magic_number::is_negative(num);
20443 if(to_string_special_value_check(num,aret,is_negative))
20445 return to_string_rough_no_special_value_check(num);
20448 template<
typename T>
20449 inline T from_string_get_num_base(
string str)
const noexcept{
20450 if constexpr(::std::is_floating_point_v<T>){
20451 size_t order_of_magnitude = str.size();
20453 size_t i=str.size();
20456 const size_t index=_radix_table.find(str[i]);
20457 if(index==string::npos){
20458 if(str[i] == _fractional_sign){
20459 order_of_magnitude=i;
20467 aret*=pow(_radix, order_of_magnitude);
20472 for(
size_t i = 0; i < str.size(); i++){
20473 const size_t index = _radix_table.find(str[i]);
20474 if(index == string::npos)
20482 template<
typename T>
20483 inline bool from_string_special_value_check(
string str,T& num,
bool is_negative)
const noexcept{
20484 if constexpr(::std::numeric_limits<T>::has_signaling_NaN || ::std::numeric_limits<T>::has_quiet_NaN){
20485 if constexpr(::std::numeric_limits<T>::has_signaling_NaN)
20486 if(str==_signaling_nan){
20487 num= copy_as_negative(::std::numeric_limits<T>::signaling_NaN(),is_negative);
20490 if constexpr(::std::numeric_limits<T>::has_quiet_NaN)
20491 if(str==_quiet_nan){
20492 num= copy_as_negative(::std::numeric_limits<T>::quiet_NaN(),is_negative);
20495 if(str.starts_with(_nan+_unknown_data_start_sign)){
20496 str.pop_front(_nan.size()+1);
20499 data_block<T> block;
20500 size_t write_index = 0;
20502 const size_t dot_pos = str.find(_unknown_data_split_sign);
20503 auto byte_str = str.substr(0, dot_pos);
20504 block[write_index++] = (byte)from_string_get<unsigned char>(byte_str);
20505 if(dot_pos == string::npos)
20507 str = str.substr(dot_pos+1);
20509 num= data_cast<T>(block);
20513 if constexpr(::std::numeric_limits<T>::has_quiet_NaN)
20514 num= copy_as_negative(::std::numeric_limits<T>::quiet_NaN(),is_negative);
20516 num= copy_as_negative(::std::numeric_limits<T>::signaling_NaN(),is_negative);
20520 if constexpr(::std::numeric_limits<T>::has_infinity){
20523 return copy_as_negative(::std::numeric_limits<T>::infinity());
20525 return ::std::numeric_limits<T>::infinity();
20532 template<
typename T> requires ::std::is_arithmetic_v<T>
20533 inline T from_string_get(
string str)
const noexcept{
20535 if constexpr(::std::is_floating_point_v<T>){
20536 const auto info_tail_size=get_info_tail_size<T>();
20537 if(str.size()>info_tail_size){
20538 const auto tail_pos=str.size()-info_tail_size;
20539 auto info_tail=str.substr(tail_pos);
20540 auto str_with_out_tail=str.substr(0,tail_pos);
20541 if(str_with_out_tail.back()==_fractional_sign)
20542 str_with_out_tail.pop_back();
20543 auto num=get_from_info_tail<T>(info_tail);
20544 if(to_string_rough(num)==str_with_out_tail)
20546 str_with_out_tail+=
string{info_tail.size(),_radix_table[0]};
20547 if(to_string_rough(num)==str_with_out_tail)
20553 bool is_negative=
false;
20554 if constexpr(!::std::is_unsigned_v<T>)
20555 if(str[0]==_negative_sign){
20559 if(str[0]==_positive_sign)
20561 if(from_string_special_value_check(str,num,is_negative))
20563 typedef decltype(
lambda{
20564 if constexpr(::std::is_unsigned_v<T>||::std::is_floating_point_v<T>)
20567 return::std::make_unsigned_t<T>();
20569 UT unum=from_string_get_num_base<UT>(str);
20570 return copy_as_negative<T>(unum,is_negative);
20572 template<
typename T> requires ::std::is_arithmetic_v<T>
20573 inline string to_string(T num)
const noexcept{
20575 if(to_string_special_value_check(num,aret,is_negative(num)))
20577 aret=to_string_rough_no_special_value_check(num);
20578 if constexpr(::std::is_floating_point_v<T>){
20580 auto rounding_up_char =
lambda_with_catch(&) (string::arec_t char_arc)
noexcept{
20581 const char_t up_char = move(char_arc);
20582 size_t up_pos = _radix_table.find(up_char);
20584 if(up_pos == _radix)
20586 move(char_arc) = _radix_table[up_pos];
20587 return up_pos == 0;
20590 size_t i = str.size();
20592 if(rounding_up_char(str[i])){
20594 if(str[i] == _fractional_sign)
20598 str.push_front(_radix_table[1]);
20605 size_t dot_pos=aret.find(_fractional_sign);
20607 if(from_string_get<T>(aret) != num){
20609 string info_tail=get_info_tail(num);
20610 if(dot_pos==string::npos){
20611 if(aret.ends_with(
string{info_tail.size(),_radix_table[0]}))
20612 aret.pop_back(info_tail.size());
20614 aret.push_back(_fractional_sign);
20621 size_t left_pos = 0;
20622 size_t right_pos = aret.size();
20623 string better_aret,better_aret_last;
20624 if(dot_pos==string::npos)
20625 dot_pos=aret.size();
20627 size_t step_pos = (left_pos + right_pos) / 2;
20628 better_aret = aret.substr(0, step_pos);
20629 if(step_pos==dot_pos)
20632 const char_t cut_char = aret[step_pos];
20633 const size_t cut_num = _radix_table.find(cut_char);
20634 if(cut_num >= _radix / 2)
20635 rounding_up(better_aret);
20636 if(better_aret.size() < dot_pos)
20637 better_aret.resize(dot_pos,_radix_table[0]);
20639 if(from_string_get<T>(better_aret) == num){
20640 if(better_aret.back() == _radix_table[0]){
20641 const auto end_pos = max(better_aret.find_last_not_of(_radix_table[0])+1, dot_pos);
20642 better_aret.resize(end_pos);
20643 if(better_aret.back() == _fractional_sign)
20644 better_aret.pop_back();
20646 right_pos = min(better_aret.size(), step_pos);
20647 better_aret_last = better_aret;
20649 elseif(left_pos != step_pos)
20650 left_pos = step_pos;
20653 }
while(left_pos < right_pos);
20654 if(better_aret_last){
20655 aret = better_aret_last;
20656 if(aret.ends_with(_fractional_sign))
20665 distinctive inline numerical_representation_t trinary{3,
es"012"_constexpr_str};
20666 distinctive inline numerical_representation_t binary{2,
es"01"_constexpr_str};
20667 distinctive inline numerical_representation_t octal{8,
es"01234567"_constexpr_str};
20668 distinctive inline numerical_representation_t decimal{10,
es"0123456789"_constexpr_str};
20669 distinctive inline numerical_representation_t hexadecimal{16,
es"0123456789abcdef"_constexpr_str};
20670 distinctive inline numerical_representation_t hexadecimal_upper{16,
es"0123456789ABCDEF"_constexpr_str};
20674 template<
typename T> requires ::std::is_arithmetic_v<T>
20675 inline T from_string_get(
const string&str,
const numerical_representation_t&radix=decimal)
noexcept{
20676 return radix.from_string_get<T>(str);
20679 template<
typename T> requires ::std::is_arithmetic_v<T>
20680 inline string to_string_rough(T num,
const numerical_representation_t&radix=decimal)
noexcept{
20681 return radix.to_string_rough(num);
20684 template<
typename T> requires ::std::is_arithmetic_v<T>
20685 inline string to_string(T num,
const numerical_representation_t&radix=decimal)
noexcept{
20686 return radix.to_string(num);
20691 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/_body.hpp"
20692 #if defined(ELC_TEST_ON)
20693 namespace numerical_representation_part_test{
20694 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/_test.hpp"
20702 inline void test(){
20705 inline void test_log_out(){
20707 inline void test_end(){
20712 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/_body.hpp"
20716 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
20724 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
20735 #if defined(_MSC_VER)
20736 #pragma warning(pop)
20738 #undef suppress_msvc_warning
20739 #undef disable_msvc_warning
20740 #undef push_msvc_warning
20741 #undef pop_msvc_warning
20742 #undef push_and_disable_msvc_warning
20745 #undef BIT_POSSIBILITY
20747 #if defined(ELC_VOID_NAME)
20748 #define void the_void
20753 #undef noexcept_as_auto
20754 #undef constexpr_as
20755 #undef constexpr_as_auto
20757 #undef using_method_from_base_t
20758 #undef using_method_from_value
20763 #undef re_declvalue
20768 #undef template_error
20769 #undef template_warning
20771 #undef type_info_of
20772 #undef type_name_of
20774 #undef is_common_attribute
20775 #undef is_special_attribute
20777 #undef has_attribute
20778 #undef not_has_attribute
20780 #undef float_size_of
20783 #undef def_common_attribute_with_nothing
20784 #undef def_special_attribute_with_nothing
20786 #undef common_attribute_t
20787 #undef special_attribute_t
20790 #undef enabled_by_default
20791 #undef disabled_by_default
20792 #undef enable_if_not_ill_form
20795 #undef was_an_ill_form
20796 #undef was_an_ill_form_with_parameter
20797 #undef was_not_an_ill_form
20798 #undef was_not_an_ill_form_and_noexcept
20799 #undef was_not_an_ill_form_with_parameter
20801 #undef recursive_lambda
20802 #undef get_recursive_lambda_caller
20804 #undef lambda_with_catch
20805 #undef self_recursion
20806 #undef lambda_RLSRRS
20814 #undef _small_than_
20816 #if defined(_MSC_VER)
20822 #undef INTER_NAMESPACE
20823 #undef BREAK_NAMESPACE
20828 #undef template_name
20831 #undef not_in_debug
20836 #undef ELC_TEST_EVENTNAME
20838 #undef override_instance_struct
20842 #undef force_inline
20844 #undef with_no_vtable
20846 #undef in_consteval
20848 #undef no_vtable_struct
20849 #undef no_vtable_class
20853 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
20857 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/_body.hpp"
20860 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/_export.hpp"
20869 #define export using defs::
20877 #line 25 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/_body.hpp"
20882 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/numerical_representation"
20887 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/library_load.hpp"
20889 #error ERROR_MSG_UNABLE_OS
20892 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
20904 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
20906 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
20917 #define BIT_POSSIBILITY 2
20921 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
20923 #if defined(_MSC_VER)
20924 #pragma warning(push,ELC_WARNING_LEVEL)
20925 #pragma warning(disable:4099)
20926 #pragma warning(disable:26812)
20927 #pragma warning(disable:4584)
20928 #pragma warning(disable:4250)
20929 #pragma warning(disable:26432)
20930 #pragma warning(disable:26435)
20931 #pragma warning(disable:26481)
20932 #pragma warning(disable:26446)
20933 #pragma warning(disable:26434)
20934 #pragma warning(disable:26429)
20935 #pragma warning(disable:26471)
20936 #pragma warning(disable:26474)
20937 #pragma warning(disable:26473)
20938 #pragma warning(disable:26456)
20939 #pragma warning(disable:26485)
20940 #pragma warning(disable:26490)
20941 #pragma warning(disable:26472)
20942 #pragma warning(disable:26482)
20943 #pragma warning(disable:26493)
20945 #if defined(_MSC_VER)
20946 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
20947 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
20948 #define push_msvc_warning() __pragma(warning(push))
20949 #define pop_msvc_warning() __pragma(warning(pop))
20950 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
20952 #define suppress_msvc_warning(...)
20953 #define disable_msvc_warning(...)
20954 #define push_msvc_warning()
20955 #define pop_msvc_warning()
20956 #define push_and_disable_msvc_warning(...)
20959 #if defined(ELC_VOID_NAME)
20964 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
20965 #define noexcept_as_auto MAGIC
20966 #define constexpr_as(...) MAGIC constexpr
20967 #define constexpr_as_auto MAGIC MAGIC constexpr
20969 #define using_method_from_base_t(name,...) \
20970 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
20971 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
20973 return base_t::name(forward<Args>(rest)...);\
20976 #define using_method_from_value(name,value_name,...) \
20977 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
20978 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
20980 return value_name.name(forward<Args>(rest)...);\
20983 #define floop while(__builtin_is_my_dick_still_there())
20984 #define enable_adl(name) void name()noexcept=delete
20986 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
20987 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
20989 #define declvalue(...) (::std::declval<__VA_ARGS__>())
20992 #define template_error(reason) static_assert(template_error_helper<T>,reason)
20994 #define template_warning(reason) template_warning_helper<T>(reason)
20997 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
20998 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
21000 #define is_common_attribute(name) public attribute<T,name<T>>
21001 #define is_special_attribute(name) public attribute<T,name>
21003 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
21004 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
21007 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
21009 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
21012 #define def_common_attribute_with_nothing(name) \
21013 template<typename T>\
21016 #define def_special_attribute_with_nothing(name) \
21019 #define common_attribute_t template<class>class
21020 #define special_attribute_t class
21030 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
21032 #define enabled_by_default class enable_state=void
21034 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
21036 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
21038 #define enable_flag class enable_state
21040 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
21041 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
21042 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
21043 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
21044 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
21047 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
21049 #define get_recursive_lambda_caller(name) \
21050 lambda_with_catch(&)(auto&&...Args){\
21051 return name(name,Args...);\
21056 #define lambda_with_catch(...) [__VA_ARGS__]
21058 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
21060 #define lambda_RLSRRS _my_jb_super_sb_name_
21068 #define elseif else if
21070 #define _big_than_ >
21072 #define _small_than_ <
21074 #if defined(_MSC_VER)
21081 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
21083 #define BREAK_NAMESPACE }
21086 #define template_name template
21088 #define type_name class
21090 #if defined(DEBUG) || defined(_DEBUG)
21091 #define not_in_debug 0
21093 #define not_in_debug 1
21097 #define ec(ch) U ## ch
21099 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
21100 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
21102 #define ELC_TEST_EVENTNAME(name)
21105 #define override_instance_struct \
21107 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
21108 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
21109 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
21110 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
21111 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
21113 #if defined(_WIN32)
21114 #define distinctive __declspec(dllexport)
21116 #define distinctive
21119 #if defined(_WIN32)
21120 #define force_inline __forceinline
21121 #elif defined(__GNUC__)
21122 #define force_inline __attribute__((always_inline)) inline
21124 #define force_inline inline
21127 #if defined(_WIN32)
21128 #define with_no_vtable __declspec(novtable)
21130 #define with_no_vtable
21133 #define in_consteval (::std::is_constant_evaluated())
21135 #define no_vtable_struct struct with_no_vtable
21136 #define no_vtable_class class with_no_vtable
21140 #line 29 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/library_load.hpp"
21145 #if SYSTEM_TYPE == linux
21147 #elif SYSTEM_TYPE == windows
21155 #if SYSTEM_TYPE == linux
21156 dlopen(file_name,RTLD_LAZY)
21157 #elif SYSTEM_TYPE == windows
21158 LoadLibraryA((LPCSTR)file_name)
21164 #if SYSTEM_TYPE == linux
21165 to_char_t_str(dlerror());
21166 #elif SYSTEM_TYPE == windows
21167 es"ERROR CODE:"_constexpr_str+to_string((DWORD)GetLastError());
21172 #if SYSTEM_TYPE == linux
21174 #elif SYSTEM_TYPE == windows
21175 FreeLibrary(handle)
21179 [[nodiscard]]
inline void*
base_get_symbol(library_handle handle,
const char*symbol_name)
noexcept{
21182 #if SYSTEM_TYPE == linux
21183 dlsym(handle,symbol_name)
21184 #elif SYSTEM_TYPE == windows
21185 (
void*)GetProcAddress(handle,(LPCSTR)symbol_name)
21200 [[nodiscard]]
inline void*
get_symbol(library_handle handle,
string symbol_name)
noexcept{
21205 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
21216 #if defined(_MSC_VER)
21217 #pragma warning(pop)
21219 #undef suppress_msvc_warning
21220 #undef disable_msvc_warning
21221 #undef push_msvc_warning
21222 #undef pop_msvc_warning
21223 #undef push_and_disable_msvc_warning
21226 #undef BIT_POSSIBILITY
21228 #if defined(ELC_VOID_NAME)
21229 #define void the_void
21234 #undef noexcept_as_auto
21235 #undef constexpr_as
21236 #undef constexpr_as_auto
21238 #undef using_method_from_base_t
21239 #undef using_method_from_value
21244 #undef re_declvalue
21249 #undef template_error
21250 #undef template_warning
21252 #undef type_info_of
21253 #undef type_name_of
21255 #undef is_common_attribute
21256 #undef is_special_attribute
21258 #undef has_attribute
21259 #undef not_has_attribute
21261 #undef float_size_of
21264 #undef def_common_attribute_with_nothing
21265 #undef def_special_attribute_with_nothing
21267 #undef common_attribute_t
21268 #undef special_attribute_t
21271 #undef enabled_by_default
21272 #undef disabled_by_default
21273 #undef enable_if_not_ill_form
21276 #undef was_an_ill_form
21277 #undef was_an_ill_form_with_parameter
21278 #undef was_not_an_ill_form
21279 #undef was_not_an_ill_form_and_noexcept
21280 #undef was_not_an_ill_form_with_parameter
21282 #undef recursive_lambda
21283 #undef get_recursive_lambda_caller
21285 #undef lambda_with_catch
21286 #undef self_recursion
21287 #undef lambda_RLSRRS
21295 #undef _small_than_
21297 #if defined(_MSC_VER)
21303 #undef INTER_NAMESPACE
21304 #undef BREAK_NAMESPACE
21309 #undef template_name
21312 #undef not_in_debug
21317 #undef ELC_TEST_EVENTNAME
21319 #undef override_instance_struct
21323 #undef force_inline
21325 #undef with_no_vtable
21327 #undef in_consteval
21329 #undef no_vtable_struct
21330 #undef no_vtable_class
21334 #line 94 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/library_load.hpp"
21336 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/_tools/undef_decl_system_type.hpp"
21349 #undef ERROR_MSG_UNABLE_OS
21353 #line 96 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/library_load.hpp"
21358 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
21361 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
21374 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
21378 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
21380 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
21388 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
21400 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
21402 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
21413 #define BIT_POSSIBILITY 2
21417 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
21419 #if defined(_MSC_VER)
21420 #pragma warning(push,ELC_WARNING_LEVEL)
21421 #pragma warning(disable:4099)
21422 #pragma warning(disable:26812)
21423 #pragma warning(disable:4584)
21424 #pragma warning(disable:4250)
21425 #pragma warning(disable:26432)
21426 #pragma warning(disable:26435)
21427 #pragma warning(disable:26481)
21428 #pragma warning(disable:26446)
21429 #pragma warning(disable:26434)
21430 #pragma warning(disable:26429)
21431 #pragma warning(disable:26471)
21432 #pragma warning(disable:26474)
21433 #pragma warning(disable:26473)
21434 #pragma warning(disable:26456)
21435 #pragma warning(disable:26485)
21436 #pragma warning(disable:26490)
21437 #pragma warning(disable:26472)
21438 #pragma warning(disable:26482)
21439 #pragma warning(disable:26493)
21441 #if defined(_MSC_VER)
21442 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
21443 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
21444 #define push_msvc_warning() __pragma(warning(push))
21445 #define pop_msvc_warning() __pragma(warning(pop))
21446 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
21448 #define suppress_msvc_warning(...)
21449 #define disable_msvc_warning(...)
21450 #define push_msvc_warning()
21451 #define pop_msvc_warning()
21452 #define push_and_disable_msvc_warning(...)
21455 #if defined(ELC_VOID_NAME)
21460 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
21461 #define noexcept_as_auto MAGIC
21462 #define constexpr_as(...) MAGIC constexpr
21463 #define constexpr_as_auto MAGIC MAGIC constexpr
21465 #define using_method_from_base_t(name,...) \
21466 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
21467 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
21469 return base_t::name(forward<Args>(rest)...);\
21472 #define using_method_from_value(name,value_name,...) \
21473 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
21474 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
21476 return value_name.name(forward<Args>(rest)...);\
21479 #define floop while(__builtin_is_my_dick_still_there())
21480 #define enable_adl(name) void name()noexcept=delete
21482 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
21483 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
21485 #define declvalue(...) (::std::declval<__VA_ARGS__>())
21488 #define template_error(reason) static_assert(template_error_helper<T>,reason)
21490 #define template_warning(reason) template_warning_helper<T>(reason)
21493 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
21494 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
21496 #define is_common_attribute(name) public attribute<T,name<T>>
21497 #define is_special_attribute(name) public attribute<T,name>
21499 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
21500 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
21503 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
21505 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
21508 #define def_common_attribute_with_nothing(name) \
21509 template<typename T>\
21512 #define def_special_attribute_with_nothing(name) \
21515 #define common_attribute_t template<class>class
21516 #define special_attribute_t class
21526 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
21528 #define enabled_by_default class enable_state=void
21530 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
21532 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
21534 #define enable_flag class enable_state
21536 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
21537 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
21538 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
21539 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
21540 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
21543 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
21545 #define get_recursive_lambda_caller(name) \
21546 lambda_with_catch(&)(auto&&...Args){\
21547 return name(name,Args...);\
21552 #define lambda_with_catch(...) [__VA_ARGS__]
21554 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
21556 #define lambda_RLSRRS _my_jb_super_sb_name_
21564 #define elseif else if
21566 #define _big_than_ >
21568 #define _small_than_ <
21570 #if defined(_MSC_VER)
21577 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
21579 #define BREAK_NAMESPACE }
21582 #define template_name template
21584 #define type_name class
21586 #if defined(DEBUG) || defined(_DEBUG)
21587 #define not_in_debug 0
21589 #define not_in_debug 1
21593 #define ec(ch) U ## ch
21595 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
21596 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
21598 #define ELC_TEST_EVENTNAME(name)
21601 #define override_instance_struct \
21603 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
21604 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
21605 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
21606 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
21607 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
21609 #if defined(_WIN32)
21610 #define distinctive __declspec(dllexport)
21612 #define distinctive
21615 #if defined(_WIN32)
21616 #define force_inline __forceinline
21617 #elif defined(__GNUC__)
21618 #define force_inline __attribute__((always_inline)) inline
21620 #define force_inline inline
21623 #if defined(_WIN32)
21624 #define with_no_vtable __declspec(novtable)
21626 #define with_no_vtable
21629 #define in_consteval (::std::is_constant_evaluated())
21631 #define no_vtable_struct struct with_no_vtable
21632 #define no_vtable_class class with_no_vtable
21636 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
21640 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
21642 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/lib_loader.hpp"
21651 namespace lib_loader_n{
21665 _m=library_handle{0};
21666 _error=locale::str::lib_load::null_lib;
21667 attribute_ptr_cast<ref_able>(
this)->init_never_ref_num_zero();
21671 _m=load_library(lib_name);
21674 _error=get_load_error();
21679 [[nodiscard]]
explicit operator bool()const noexcept{
21690 return APIs::library_load::get_symbol(
_m,symbol_name);
21692 template<
class symbol_t>
21694 return*
reinterpret_cast<symbol_t*
>(get_symbol(symbol_name));
21696 template<
class Func_t>
21697 [[nodiscard]]function_t<Func_t>get_symbol_as_function(
string symbol_name)
noexcept;
21700 return a->operator bool();
21719 template<
class Func_t>
21721 #if !defined(_MSC_VER)
21722 template<
class Ret_t,
class...Args_t,
bool nothrow>
21729 template<
class Ret_t,
class...Args_t>
21731 symbol_t(library_handle_t lib,
string symbol_name,Ret_t(*self)(Args_t...))noexcept:
21734 template<
class Ret_t,
class...Args_t>
21735 struct symbol_t<Ret_t(Args_t...)noexcept>:function_data_warpper_t<Ret_t(*)(Args_t...)noexcept>,base_symbol_t{
21736 symbol_t(library_handle_t lib,
string symbol_name,Ret_t(*self)(Args_t...)noexcept)noexcept:
21737 function_data_warpper_t<Ret_t(*)(Args_t...)noexcept>(self),base_symbol_t(lib,symbol_name){}
21741 template<
class Func_t>
21742 [[nodiscard]]
inline function_t<Func_t>library_info_t::get_symbol_as_function(
string symbol_name)
noexcept{
21743 auto func_p=&get_symbol_as<Func_t>(symbol_name);
21751 return get<library_info_t>(lib_name);
21753 template<
class Func_t>
21756 if(symbol_info.fail())
21759 return symbol_info.get_ref()._lib;
21761 template<
class Func_t>
21764 if(symbol_info.fail())
21767 return symbol_info.get_ref().
_name;
21773 #line 20 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
21774 #if defined(ELC_TEST_ON)
21775 namespace lib_loader_part_test{
21776 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_test.hpp"
21784 inline void test(){
21787 inline void test_log_out(){}
21788 inline void test_end{}
21792 #line 23 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
21796 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
21804 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
21815 #if defined(_MSC_VER)
21816 #pragma warning(pop)
21818 #undef suppress_msvc_warning
21819 #undef disable_msvc_warning
21820 #undef push_msvc_warning
21821 #undef pop_msvc_warning
21822 #undef push_and_disable_msvc_warning
21825 #undef BIT_POSSIBILITY
21827 #if defined(ELC_VOID_NAME)
21828 #define void the_void
21833 #undef noexcept_as_auto
21834 #undef constexpr_as
21835 #undef constexpr_as_auto
21837 #undef using_method_from_base_t
21838 #undef using_method_from_value
21843 #undef re_declvalue
21848 #undef template_error
21849 #undef template_warning
21851 #undef type_info_of
21852 #undef type_name_of
21854 #undef is_common_attribute
21855 #undef is_special_attribute
21857 #undef has_attribute
21858 #undef not_has_attribute
21860 #undef float_size_of
21863 #undef def_common_attribute_with_nothing
21864 #undef def_special_attribute_with_nothing
21866 #undef common_attribute_t
21867 #undef special_attribute_t
21870 #undef enabled_by_default
21871 #undef disabled_by_default
21872 #undef enable_if_not_ill_form
21875 #undef was_an_ill_form
21876 #undef was_an_ill_form_with_parameter
21877 #undef was_not_an_ill_form
21878 #undef was_not_an_ill_form_and_noexcept
21879 #undef was_not_an_ill_form_with_parameter
21881 #undef recursive_lambda
21882 #undef get_recursive_lambda_caller
21884 #undef lambda_with_catch
21885 #undef self_recursion
21886 #undef lambda_RLSRRS
21894 #undef _small_than_
21896 #if defined(_MSC_VER)
21902 #undef INTER_NAMESPACE
21903 #undef BREAK_NAMESPACE
21908 #undef template_name
21911 #undef not_in_debug
21916 #undef ELC_TEST_EVENTNAME
21918 #undef override_instance_struct
21922 #undef force_inline
21924 #undef with_no_vtable
21926 #undef in_consteval
21928 #undef no_vtable_struct
21929 #undef no_vtable_class
21933 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
21937 #line 27 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
21940 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_export.hpp"
21949 #define export using defs::lib_loader_n::
21958 #line 30 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
21963 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/lib_loader"
21968 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
21969 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/literal"
21978 #if !defined(ELC_LITERAL)
21979 #define ELC_LITERAL
21980 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/literal/_body.hpp"
21989 #if defined(ELC_TEST)
21990 #error "this part cannot be tested."
21993 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
22001 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
22013 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
22015 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
22026 #define BIT_POSSIBILITY 2
22030 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
22032 #if defined(_MSC_VER)
22033 #pragma warning(push,ELC_WARNING_LEVEL)
22034 #pragma warning(disable:4099)
22035 #pragma warning(disable:26812)
22036 #pragma warning(disable:4584)
22037 #pragma warning(disable:4250)
22038 #pragma warning(disable:26432)
22039 #pragma warning(disable:26435)
22040 #pragma warning(disable:26481)
22041 #pragma warning(disable:26446)
22042 #pragma warning(disable:26434)
22043 #pragma warning(disable:26429)
22044 #pragma warning(disable:26471)
22045 #pragma warning(disable:26474)
22046 #pragma warning(disable:26473)
22047 #pragma warning(disable:26456)
22048 #pragma warning(disable:26485)
22049 #pragma warning(disable:26490)
22050 #pragma warning(disable:26472)
22051 #pragma warning(disable:26482)
22052 #pragma warning(disable:26493)
22054 #if defined(_MSC_VER)
22055 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
22056 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
22057 #define push_msvc_warning() __pragma(warning(push))
22058 #define pop_msvc_warning() __pragma(warning(pop))
22059 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
22061 #define suppress_msvc_warning(...)
22062 #define disable_msvc_warning(...)
22063 #define push_msvc_warning()
22064 #define pop_msvc_warning()
22065 #define push_and_disable_msvc_warning(...)
22068 #if defined(ELC_VOID_NAME)
22073 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
22074 #define noexcept_as_auto MAGIC
22075 #define constexpr_as(...) MAGIC constexpr
22076 #define constexpr_as_auto MAGIC MAGIC constexpr
22078 #define using_method_from_base_t(name,...) \
22079 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
22080 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
22082 return base_t::name(forward<Args>(rest)...);\
22085 #define using_method_from_value(name,value_name,...) \
22086 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
22087 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
22089 return value_name.name(forward<Args>(rest)...);\
22092 #define floop while(__builtin_is_my_dick_still_there())
22093 #define enable_adl(name) void name()noexcept=delete
22095 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
22096 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
22098 #define declvalue(...) (::std::declval<__VA_ARGS__>())
22101 #define template_error(reason) static_assert(template_error_helper<T>,reason)
22103 #define template_warning(reason) template_warning_helper<T>(reason)
22106 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
22107 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
22109 #define is_common_attribute(name) public attribute<T,name<T>>
22110 #define is_special_attribute(name) public attribute<T,name>
22112 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
22113 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
22116 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
22118 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
22121 #define def_common_attribute_with_nothing(name) \
22122 template<typename T>\
22125 #define def_special_attribute_with_nothing(name) \
22128 #define common_attribute_t template<class>class
22129 #define special_attribute_t class
22139 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
22141 #define enabled_by_default class enable_state=void
22143 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
22145 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
22147 #define enable_flag class enable_state
22149 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
22150 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
22151 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
22152 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
22153 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
22156 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
22158 #define get_recursive_lambda_caller(name) \
22159 lambda_with_catch(&)(auto&&...Args){\
22160 return name(name,Args...);\
22165 #define lambda_with_catch(...) [__VA_ARGS__]
22167 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
22169 #define lambda_RLSRRS _my_jb_super_sb_name_
22177 #define elseif else if
22179 #define _big_than_ >
22181 #define _small_than_ <
22183 #if defined(_MSC_VER)
22190 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
22192 #define BREAK_NAMESPACE }
22195 #define template_name template
22197 #define type_name class
22199 #if defined(DEBUG) || defined(_DEBUG)
22200 #define not_in_debug 0
22202 #define not_in_debug 1
22206 #define ec(ch) U ## ch
22208 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
22209 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
22211 #define ELC_TEST_EVENTNAME(name)
22214 #define override_instance_struct \
22216 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
22217 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
22218 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
22219 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
22220 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
22222 #if defined(_WIN32)
22223 #define distinctive __declspec(dllexport)
22225 #define distinctive
22228 #if defined(_WIN32)
22229 #define force_inline __forceinline
22230 #elif defined(__GNUC__)
22231 #define force_inline __attribute__((always_inline)) inline
22233 #define force_inline inline
22236 #if defined(_WIN32)
22237 #define with_no_vtable __declspec(novtable)
22239 #define with_no_vtable
22242 #define in_consteval (::std::is_constant_evaluated())
22244 #define no_vtable_struct struct with_no_vtable
22245 #define no_vtable_class class with_no_vtable
22249 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
22253 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/literal/_body.hpp"
22255 #if defined(ELC_TEST_ON)
22256 namespace literal_part_test{
22257 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/literal/_test.hpp"
22265 inline void test(){
22268 inline void test_log_out(){
22270 inline void test_end{
22275 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/literal/_body.hpp"
22279 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
22287 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
22298 #if defined(_MSC_VER)
22299 #pragma warning(pop)
22301 #undef suppress_msvc_warning
22302 #undef disable_msvc_warning
22303 #undef push_msvc_warning
22304 #undef pop_msvc_warning
22305 #undef push_and_disable_msvc_warning
22308 #undef BIT_POSSIBILITY
22310 #if defined(ELC_VOID_NAME)
22311 #define void the_void
22316 #undef noexcept_as_auto
22317 #undef constexpr_as
22318 #undef constexpr_as_auto
22320 #undef using_method_from_base_t
22321 #undef using_method_from_value
22326 #undef re_declvalue
22331 #undef template_error
22332 #undef template_warning
22334 #undef type_info_of
22335 #undef type_name_of
22337 #undef is_common_attribute
22338 #undef is_special_attribute
22340 #undef has_attribute
22341 #undef not_has_attribute
22343 #undef float_size_of
22346 #undef def_common_attribute_with_nothing
22347 #undef def_special_attribute_with_nothing
22349 #undef common_attribute_t
22350 #undef special_attribute_t
22353 #undef enabled_by_default
22354 #undef disabled_by_default
22355 #undef enable_if_not_ill_form
22358 #undef was_an_ill_form
22359 #undef was_an_ill_form_with_parameter
22360 #undef was_not_an_ill_form
22361 #undef was_not_an_ill_form_and_noexcept
22362 #undef was_not_an_ill_form_with_parameter
22364 #undef recursive_lambda
22365 #undef get_recursive_lambda_caller
22367 #undef lambda_with_catch
22368 #undef self_recursion
22369 #undef lambda_RLSRRS
22377 #undef _small_than_
22379 #if defined(_MSC_VER)
22385 #undef INTER_NAMESPACE
22386 #undef BREAK_NAMESPACE
22391 #undef template_name
22394 #undef not_in_debug
22399 #undef ELC_TEST_EVENTNAME
22401 #undef override_instance_struct
22405 #undef force_inline
22407 #undef with_no_vtable
22409 #undef in_consteval
22411 #undef no_vtable_struct
22412 #undef no_vtable_class
22416 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
22420 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/literal/_body.hpp"
22423 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/literal/_export.hpp"
22432 #define export using ::
22437 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/literal/_body.hpp"
22442 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/literal"
22447 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
22449 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/memory_stream"
22458 #if !defined(ELC_MEMORY_STREAM)
22459 #define ELC_MEMORY_STREAM
22460 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/_body.hpp"
22469 #if defined(ELC_TEST)
22470 #error "this part cannot be tested."
22473 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
22481 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
22493 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
22495 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
22506 #define BIT_POSSIBILITY 2
22510 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
22512 #if defined(_MSC_VER)
22513 #pragma warning(push,ELC_WARNING_LEVEL)
22514 #pragma warning(disable:4099)
22515 #pragma warning(disable:26812)
22516 #pragma warning(disable:4584)
22517 #pragma warning(disable:4250)
22518 #pragma warning(disable:26432)
22519 #pragma warning(disable:26435)
22520 #pragma warning(disable:26481)
22521 #pragma warning(disable:26446)
22522 #pragma warning(disable:26434)
22523 #pragma warning(disable:26429)
22524 #pragma warning(disable:26471)
22525 #pragma warning(disable:26474)
22526 #pragma warning(disable:26473)
22527 #pragma warning(disable:26456)
22528 #pragma warning(disable:26485)
22529 #pragma warning(disable:26490)
22530 #pragma warning(disable:26472)
22531 #pragma warning(disable:26482)
22532 #pragma warning(disable:26493)
22534 #if defined(_MSC_VER)
22535 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
22536 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
22537 #define push_msvc_warning() __pragma(warning(push))
22538 #define pop_msvc_warning() __pragma(warning(pop))
22539 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
22541 #define suppress_msvc_warning(...)
22542 #define disable_msvc_warning(...)
22543 #define push_msvc_warning()
22544 #define pop_msvc_warning()
22545 #define push_and_disable_msvc_warning(...)
22548 #if defined(ELC_VOID_NAME)
22553 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
22554 #define noexcept_as_auto MAGIC
22555 #define constexpr_as(...) MAGIC constexpr
22556 #define constexpr_as_auto MAGIC MAGIC constexpr
22558 #define using_method_from_base_t(name,...) \
22559 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
22560 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
22562 return base_t::name(forward<Args>(rest)...);\
22565 #define using_method_from_value(name,value_name,...) \
22566 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
22567 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
22569 return value_name.name(forward<Args>(rest)...);\
22572 #define floop while(__builtin_is_my_dick_still_there())
22573 #define enable_adl(name) void name()noexcept=delete
22575 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
22576 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
22578 #define declvalue(...) (::std::declval<__VA_ARGS__>())
22581 #define template_error(reason) static_assert(template_error_helper<T>,reason)
22583 #define template_warning(reason) template_warning_helper<T>(reason)
22586 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
22587 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
22589 #define is_common_attribute(name) public attribute<T,name<T>>
22590 #define is_special_attribute(name) public attribute<T,name>
22592 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
22593 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
22596 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
22598 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
22601 #define def_common_attribute_with_nothing(name) \
22602 template<typename T>\
22605 #define def_special_attribute_with_nothing(name) \
22608 #define common_attribute_t template<class>class
22609 #define special_attribute_t class
22619 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
22621 #define enabled_by_default class enable_state=void
22623 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
22625 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
22627 #define enable_flag class enable_state
22629 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
22630 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
22631 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
22632 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
22633 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
22636 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
22638 #define get_recursive_lambda_caller(name) \
22639 lambda_with_catch(&)(auto&&...Args){\
22640 return name(name,Args...);\
22645 #define lambda_with_catch(...) [__VA_ARGS__]
22647 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
22649 #define lambda_RLSRRS _my_jb_super_sb_name_
22657 #define elseif else if
22659 #define _big_than_ >
22661 #define _small_than_ <
22663 #if defined(_MSC_VER)
22670 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
22672 #define BREAK_NAMESPACE }
22675 #define template_name template
22677 #define type_name class
22679 #if defined(DEBUG) || defined(_DEBUG)
22680 #define not_in_debug 0
22682 #define not_in_debug 1
22686 #define ec(ch) U ## ch
22688 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
22689 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
22691 #define ELC_TEST_EVENTNAME(name)
22694 #define override_instance_struct \
22696 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
22697 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
22698 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
22699 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
22700 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
22702 #if defined(_WIN32)
22703 #define distinctive __declspec(dllexport)
22705 #define distinctive
22708 #if defined(_WIN32)
22709 #define force_inline __forceinline
22710 #elif defined(__GNUC__)
22711 #define force_inline __attribute__((always_inline)) inline
22713 #define force_inline inline
22716 #if defined(_WIN32)
22717 #define with_no_vtable __declspec(novtable)
22719 #define with_no_vtable
22722 #define in_consteval (::std::is_constant_evaluated())
22724 #define no_vtable_struct struct with_no_vtable
22725 #define no_vtable_class class with_no_vtable
22729 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
22733 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/_body.hpp"
22735 namespace stream_n{
22736 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/memory_stream.hpp"
22750 _m = get<byte>[1024]();
22758 return get_size_of_get(
_m);
22766 _pos += (ptrdiff_t)offsize;
22776 _pos = ((
byte*)p)-
_m;
22789 virtual void write(
const byte*buf,
size_t size)
noexcept override{
22790 if(size>this->bufsize()-_pos)
22791 get_resize(
_m,get_next_gold_size_to_resize_for_array(_pos+size));
22792 ::std::memcpy(
_m+_pos,buf,size);
22796 virtual size_t read(
byte*buf,
size_t size)
noexcept override{
22799 ::std::memcpy(buf,
_m+_pos,size);
22807 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/_body.hpp"
22810 #if defined(ELC_TEST_ON)
22811 namespace memory_stream_part_test{
22812 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/_test.hpp"
22820 inline void test(){
22823 inline void test_log_out(){
22825 inline void test_end(){
22830 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/_body.hpp"
22834 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
22842 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
22853 #if defined(_MSC_VER)
22854 #pragma warning(pop)
22856 #undef suppress_msvc_warning
22857 #undef disable_msvc_warning
22858 #undef push_msvc_warning
22859 #undef pop_msvc_warning
22860 #undef push_and_disable_msvc_warning
22863 #undef BIT_POSSIBILITY
22865 #if defined(ELC_VOID_NAME)
22866 #define void the_void
22871 #undef noexcept_as_auto
22872 #undef constexpr_as
22873 #undef constexpr_as_auto
22875 #undef using_method_from_base_t
22876 #undef using_method_from_value
22881 #undef re_declvalue
22886 #undef template_error
22887 #undef template_warning
22889 #undef type_info_of
22890 #undef type_name_of
22892 #undef is_common_attribute
22893 #undef is_special_attribute
22895 #undef has_attribute
22896 #undef not_has_attribute
22898 #undef float_size_of
22901 #undef def_common_attribute_with_nothing
22902 #undef def_special_attribute_with_nothing
22904 #undef common_attribute_t
22905 #undef special_attribute_t
22908 #undef enabled_by_default
22909 #undef disabled_by_default
22910 #undef enable_if_not_ill_form
22913 #undef was_an_ill_form
22914 #undef was_an_ill_form_with_parameter
22915 #undef was_not_an_ill_form
22916 #undef was_not_an_ill_form_and_noexcept
22917 #undef was_not_an_ill_form_with_parameter
22919 #undef recursive_lambda
22920 #undef get_recursive_lambda_caller
22922 #undef lambda_with_catch
22923 #undef self_recursion
22924 #undef lambda_RLSRRS
22932 #undef _small_than_
22934 #if defined(_MSC_VER)
22940 #undef INTER_NAMESPACE
22941 #undef BREAK_NAMESPACE
22946 #undef template_name
22949 #undef not_in_debug
22954 #undef ELC_TEST_EVENTNAME
22956 #undef override_instance_struct
22960 #undef force_inline
22962 #undef with_no_vtable
22964 #undef in_consteval
22966 #undef no_vtable_struct
22967 #undef no_vtable_class
22971 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
22975 #line 25 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/_body.hpp"
22978 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/_export.hpp"
22987 #define export using defs::
22993 #line 28 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/_body.hpp"
22998 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/memory_stream"
23003 #line 20 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
23004 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/namespace"
23013 #if !defined(ELC_NAMESPACE)
23014 #define ELC_NAMESPACE
23015 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
23024 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
23028 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/namespace"
23029 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
23038 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
23042 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/namespace"
23043 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/_body.hpp"
23052 #if defined(ELC_TEST)
23053 #error "this part cannot be tested."
23056 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
23064 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
23076 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
23078 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
23089 #define BIT_POSSIBILITY 2
23093 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
23095 #if defined(_MSC_VER)
23096 #pragma warning(push,ELC_WARNING_LEVEL)
23097 #pragma warning(disable:4099)
23098 #pragma warning(disable:26812)
23099 #pragma warning(disable:4584)
23100 #pragma warning(disable:4250)
23101 #pragma warning(disable:26432)
23102 #pragma warning(disable:26435)
23103 #pragma warning(disable:26481)
23104 #pragma warning(disable:26446)
23105 #pragma warning(disable:26434)
23106 #pragma warning(disable:26429)
23107 #pragma warning(disable:26471)
23108 #pragma warning(disable:26474)
23109 #pragma warning(disable:26473)
23110 #pragma warning(disable:26456)
23111 #pragma warning(disable:26485)
23112 #pragma warning(disable:26490)
23113 #pragma warning(disable:26472)
23114 #pragma warning(disable:26482)
23115 #pragma warning(disable:26493)
23117 #if defined(_MSC_VER)
23118 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
23119 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
23120 #define push_msvc_warning() __pragma(warning(push))
23121 #define pop_msvc_warning() __pragma(warning(pop))
23122 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
23124 #define suppress_msvc_warning(...)
23125 #define disable_msvc_warning(...)
23126 #define push_msvc_warning()
23127 #define pop_msvc_warning()
23128 #define push_and_disable_msvc_warning(...)
23131 #if defined(ELC_VOID_NAME)
23136 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
23137 #define noexcept_as_auto MAGIC
23138 #define constexpr_as(...) MAGIC constexpr
23139 #define constexpr_as_auto MAGIC MAGIC constexpr
23141 #define using_method_from_base_t(name,...) \
23142 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
23143 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
23145 return base_t::name(forward<Args>(rest)...);\
23148 #define using_method_from_value(name,value_name,...) \
23149 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
23150 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
23152 return value_name.name(forward<Args>(rest)...);\
23155 #define floop while(__builtin_is_my_dick_still_there())
23156 #define enable_adl(name) void name()noexcept=delete
23158 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
23159 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
23161 #define declvalue(...) (::std::declval<__VA_ARGS__>())
23164 #define template_error(reason) static_assert(template_error_helper<T>,reason)
23166 #define template_warning(reason) template_warning_helper<T>(reason)
23169 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
23170 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
23172 #define is_common_attribute(name) public attribute<T,name<T>>
23173 #define is_special_attribute(name) public attribute<T,name>
23175 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
23176 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
23179 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
23181 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
23184 #define def_common_attribute_with_nothing(name) \
23185 template<typename T>\
23188 #define def_special_attribute_with_nothing(name) \
23191 #define common_attribute_t template<class>class
23192 #define special_attribute_t class
23202 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
23204 #define enabled_by_default class enable_state=void
23206 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
23208 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
23210 #define enable_flag class enable_state
23212 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
23213 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
23214 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
23215 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
23216 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
23219 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
23221 #define get_recursive_lambda_caller(name) \
23222 lambda_with_catch(&)(auto&&...Args){\
23223 return name(name,Args...);\
23228 #define lambda_with_catch(...) [__VA_ARGS__]
23230 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
23232 #define lambda_RLSRRS _my_jb_super_sb_name_
23240 #define elseif else if
23242 #define _big_than_ >
23244 #define _small_than_ <
23246 #if defined(_MSC_VER)
23253 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
23255 #define BREAK_NAMESPACE }
23258 #define template_name template
23260 #define type_name class
23262 #if defined(DEBUG) || defined(_DEBUG)
23263 #define not_in_debug 0
23265 #define not_in_debug 1
23269 #define ec(ch) U ## ch
23271 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
23272 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
23274 #define ELC_TEST_EVENTNAME(name)
23277 #define override_instance_struct \
23279 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
23280 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
23281 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
23282 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
23283 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
23285 #if defined(_WIN32)
23286 #define distinctive __declspec(dllexport)
23288 #define distinctive
23291 #if defined(_WIN32)
23292 #define force_inline __forceinline
23293 #elif defined(__GNUC__)
23294 #define force_inline __attribute__((always_inline)) inline
23296 #define force_inline inline
23299 #if defined(_WIN32)
23300 #define with_no_vtable __declspec(novtable)
23302 #define with_no_vtable
23305 #define in_consteval (::std::is_constant_evaluated())
23307 #define no_vtable_struct struct with_no_vtable
23308 #define no_vtable_class class with_no_vtable
23312 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
23316 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/_body.hpp"
23318 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/defs.hpp"
23328 distinctive inline map_t<ptr,string> long_term_binary_node_storager<string>{};
23330 namespace namespace_n{
23335 return (*thenamespace)[
es".symbol_type_map"];
23338 _namespace_root = get<common_node>();
23339 auto&nmsp = *_namespace_root;
23340 _namespace_now = &nmsp;
23343 nmsp[
es"."] = nmsp;
23345 nmsp[
es"nil"] = nil;
23347 value nmsptm = get_symbol_type_map(&nmsp);
23348 nmsptm = get<common_node>();
23349 nmsptm[
es"void"] =
es"void";
23353 ptr namespace_now_p = _namespace_now;
23354 while(namespace_now_p && !(*namespace_now_p)[index] && !get_symbol_type_map(namespace_now_p)[index])
23355 namespace_now_p = (*namespace_now_p)[
es".."];
23356 return namespace_now_p;
23360 auto nmsp=get_symbol_namespace(index);
23361 if((*nmsp)[index] || get_symbol_type_map(nmsp)[index])
23367 return (*get_symbol_namespace(index))[index];
23371 return get_symbol_type_map(get_symbol_namespace(index))[index];
23376 _namespace_now = get_symbol(namespace_name);
23386 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/_body.hpp"
23388 #if defined(ELC_TEST_ON)
23389 namespace namespace_part_test{
23390 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/_test.hpp"
23398 inline void test(){
23401 inline void test_log_out(){
23403 inline void test_end{
23408 #line 19 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/_body.hpp"
23412 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
23420 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
23431 #if defined(_MSC_VER)
23432 #pragma warning(pop)
23434 #undef suppress_msvc_warning
23435 #undef disable_msvc_warning
23436 #undef push_msvc_warning
23437 #undef pop_msvc_warning
23438 #undef push_and_disable_msvc_warning
23441 #undef BIT_POSSIBILITY
23443 #if defined(ELC_VOID_NAME)
23444 #define void the_void
23449 #undef noexcept_as_auto
23450 #undef constexpr_as
23451 #undef constexpr_as_auto
23453 #undef using_method_from_base_t
23454 #undef using_method_from_value
23459 #undef re_declvalue
23464 #undef template_error
23465 #undef template_warning
23467 #undef type_info_of
23468 #undef type_name_of
23470 #undef is_common_attribute
23471 #undef is_special_attribute
23473 #undef has_attribute
23474 #undef not_has_attribute
23476 #undef float_size_of
23479 #undef def_common_attribute_with_nothing
23480 #undef def_special_attribute_with_nothing
23482 #undef common_attribute_t
23483 #undef special_attribute_t
23486 #undef enabled_by_default
23487 #undef disabled_by_default
23488 #undef enable_if_not_ill_form
23491 #undef was_an_ill_form
23492 #undef was_an_ill_form_with_parameter
23493 #undef was_not_an_ill_form
23494 #undef was_not_an_ill_form_and_noexcept
23495 #undef was_not_an_ill_form_with_parameter
23497 #undef recursive_lambda
23498 #undef get_recursive_lambda_caller
23500 #undef lambda_with_catch
23501 #undef self_recursion
23502 #undef lambda_RLSRRS
23510 #undef _small_than_
23512 #if defined(_MSC_VER)
23518 #undef INTER_NAMESPACE
23519 #undef BREAK_NAMESPACE
23524 #undef template_name
23527 #undef not_in_debug
23532 #undef ELC_TEST_EVENTNAME
23534 #undef override_instance_struct
23538 #undef force_inline
23540 #undef with_no_vtable
23542 #undef in_consteval
23544 #undef no_vtable_struct
23545 #undef no_vtable_class
23549 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
23553 #line 23 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/_body.hpp"
23556 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/_export.hpp"
23565 #define export using defs::
23566 export namespace_n::names;
23571 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/_body.hpp"
23576 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/namespace"
23581 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
23582 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/numerical_representation"
23591 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/numerical_representation"
23595 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
23596 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/package_symbol_loader"
23605 #if !defined(ELC_PACKAGE_SYMBOL_LOADER)
23606 #define ELC_PACKAGE_SYMBOL_LOADER
23607 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
23616 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
23620 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/package_symbol_loader"
23621 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
23630 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
23634 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/package_symbol_loader"
23635 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/lib_loader"
23644 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/lib_loader"
23648 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/package_symbol_loader"
23649 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_body.hpp"
23658 #if defined(ELC_TEST)
23659 #error "this part cannot be tested."
23663 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
23676 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
23680 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_body.hpp"
23683 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/paths.hpp"
23691 #if !defined(ELC_PATHS)
23693 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
23702 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
23706 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/paths.hpp"
23707 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
23716 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
23720 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/paths.hpp"
23721 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
23734 #line 70 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
23738 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/paths.hpp"
23740 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/_tools/decl_system_type.hpp"
23752 #if defined(__linux)||defined(__linux__)||defined(__gnu_linux__)
23753 #define SYSTEM_TYPE linux
23754 #elif defined(_WIN32)||defined(__MINGW32__)||defined(__CYGWIN__)
23755 #define SYSTEM_TYPE windows
23757 #define SYSTEM_TYPE other
23759 #define ERROR_MSG_UNABLE_OS "Unable OS,edit this file on your own or contact ELC's producers."
23763 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/paths.hpp"
23765 #if SYSTEM_TYPE == windows
23766 #include <shlobj_core.h>
23767 #elif SYSTEM_TYPE == linux
23768 #include <unistd.h>
23774 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
23786 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
23788 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
23799 #define BIT_POSSIBILITY 2
23803 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
23805 #if defined(_MSC_VER)
23806 #pragma warning(push,ELC_WARNING_LEVEL)
23807 #pragma warning(disable:4099)
23808 #pragma warning(disable:26812)
23809 #pragma warning(disable:4584)
23810 #pragma warning(disable:4250)
23811 #pragma warning(disable:26432)
23812 #pragma warning(disable:26435)
23813 #pragma warning(disable:26481)
23814 #pragma warning(disable:26446)
23815 #pragma warning(disable:26434)
23816 #pragma warning(disable:26429)
23817 #pragma warning(disable:26471)
23818 #pragma warning(disable:26474)
23819 #pragma warning(disable:26473)
23820 #pragma warning(disable:26456)
23821 #pragma warning(disable:26485)
23822 #pragma warning(disable:26490)
23823 #pragma warning(disable:26472)
23824 #pragma warning(disable:26482)
23825 #pragma warning(disable:26493)
23827 #if defined(_MSC_VER)
23828 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
23829 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
23830 #define push_msvc_warning() __pragma(warning(push))
23831 #define pop_msvc_warning() __pragma(warning(pop))
23832 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
23834 #define suppress_msvc_warning(...)
23835 #define disable_msvc_warning(...)
23836 #define push_msvc_warning()
23837 #define pop_msvc_warning()
23838 #define push_and_disable_msvc_warning(...)
23841 #if defined(ELC_VOID_NAME)
23846 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
23847 #define noexcept_as_auto MAGIC
23848 #define constexpr_as(...) MAGIC constexpr
23849 #define constexpr_as_auto MAGIC MAGIC constexpr
23851 #define using_method_from_base_t(name,...) \
23852 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
23853 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
23855 return base_t::name(forward<Args>(rest)...);\
23858 #define using_method_from_value(name,value_name,...) \
23859 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
23860 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
23862 return value_name.name(forward<Args>(rest)...);\
23865 #define floop while(__builtin_is_my_dick_still_there())
23866 #define enable_adl(name) void name()noexcept=delete
23868 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
23869 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
23871 #define declvalue(...) (::std::declval<__VA_ARGS__>())
23874 #define template_error(reason) static_assert(template_error_helper<T>,reason)
23876 #define template_warning(reason) template_warning_helper<T>(reason)
23879 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
23880 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
23882 #define is_common_attribute(name) public attribute<T,name<T>>
23883 #define is_special_attribute(name) public attribute<T,name>
23885 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
23886 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
23889 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
23891 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
23894 #define def_common_attribute_with_nothing(name) \
23895 template<typename T>\
23898 #define def_special_attribute_with_nothing(name) \
23901 #define common_attribute_t template<class>class
23902 #define special_attribute_t class
23912 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
23914 #define enabled_by_default class enable_state=void
23916 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
23918 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
23920 #define enable_flag class enable_state
23922 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
23923 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
23924 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
23925 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
23926 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
23929 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
23931 #define get_recursive_lambda_caller(name) \
23932 lambda_with_catch(&)(auto&&...Args){\
23933 return name(name,Args...);\
23938 #define lambda_with_catch(...) [__VA_ARGS__]
23940 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
23942 #define lambda_RLSRRS _my_jb_super_sb_name_
23950 #define elseif else if
23952 #define _big_than_ >
23954 #define _small_than_ <
23956 #if defined(_MSC_VER)
23963 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
23965 #define BREAK_NAMESPACE }
23968 #define template_name template
23970 #define type_name class
23972 #if defined(DEBUG) || defined(_DEBUG)
23973 #define not_in_debug 0
23975 #define not_in_debug 1
23979 #define ec(ch) U ## ch
23981 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
23982 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
23984 #define ELC_TEST_EVENTNAME(name)
23987 #define override_instance_struct \
23989 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
23990 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
23991 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
23992 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
23993 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
23995 #if defined(_WIN32)
23996 #define distinctive __declspec(dllexport)
23998 #define distinctive
24001 #if defined(_WIN32)
24002 #define force_inline __forceinline
24003 #elif defined(__GNUC__)
24004 #define force_inline __attribute__((always_inline)) inline
24006 #define force_inline inline
24009 #if defined(_WIN32)
24010 #define with_no_vtable __declspec(novtable)
24012 #define with_no_vtable
24015 #define in_consteval (::std::is_constant_evaluated())
24017 #define no_vtable_struct struct with_no_vtable
24018 #define no_vtable_class class with_no_vtable
24022 #line 25 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/paths.hpp"
24026 #if SYSTEM_TYPE == windows
24027 #define DYNAMIC_LIBRARY_SUFFIX ".dll"
24029 #define DYNAMIC_LIBRARY_SUFFIX ".so"
24033 #if SYSTEM_TYPE == windows
24034 return GetFileAttributesA(to_char_str(name).c_str())!=INVALID_FILE_ATTRIBUTES;
24035 #elif SYSTEM_TYPE == linux
24036 return access(to_char_str(name).c_str(),F_OK)==0;
24038 auto fp = ::std::fopen(to_char_str(name).c_str(),
"rb");
24047 #if SYSTEM_TYPE == windows
24048 char path[MAX_PATH];
24049 if(!SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_COMMON_APPDATA, NULL, 0, path)))
24051 return to_char_t_str(path);
24052 #elif SYSTEM_TYPE == linux
24053 return es"/usr/local/share"_constexpr_str;
24059 #if SYSTEM_TYPE == windows
24060 char path[MAX_PATH];
24061 if(!SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_WINDOWS, NULL, 0, path)))
24063 return to_char_t_str(path)+
es"\\.."_constexpr_str;
24064 #elif SYSTEM_TYPE == linux
24065 return es"/"_constexpr_str;
24071 #if SYSTEM_TYPE == windows
24077 if(program_data_path.size() &&
file_exists(program_data_path +
es"/elc/flag"_constexpr_str))
24078 return program_data_path+
es"/elc"_constexpr_str;
24082 if(system_drive.size() &&
file_exists(system_drive +
es"/elc/flag"_constexpr_str))
24083 return system_drive+
es"/elc"_constexpr_str;
24085 #elif SYSTEM_TYPE == linux
24088 string flag_path=
es"/usr/lib/elc/flag"_constexpr_str;
24090 return es"/usr/lib/elc"_constexpr_str;
24092 return es"./elc"_constexpr_str;
24102 #undef DYNAMIC_LIBRARY_SUFFIX
24104 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
24115 #if defined(_MSC_VER)
24116 #pragma warning(pop)
24118 #undef suppress_msvc_warning
24119 #undef disable_msvc_warning
24120 #undef push_msvc_warning
24121 #undef pop_msvc_warning
24122 #undef push_and_disable_msvc_warning
24125 #undef BIT_POSSIBILITY
24127 #if defined(ELC_VOID_NAME)
24128 #define void the_void
24133 #undef noexcept_as_auto
24134 #undef constexpr_as
24135 #undef constexpr_as_auto
24137 #undef using_method_from_base_t
24138 #undef using_method_from_value
24143 #undef re_declvalue
24148 #undef template_error
24149 #undef template_warning
24151 #undef type_info_of
24152 #undef type_name_of
24154 #undef is_common_attribute
24155 #undef is_special_attribute
24157 #undef has_attribute
24158 #undef not_has_attribute
24160 #undef float_size_of
24163 #undef def_common_attribute_with_nothing
24164 #undef def_special_attribute_with_nothing
24166 #undef common_attribute_t
24167 #undef special_attribute_t
24170 #undef enabled_by_default
24171 #undef disabled_by_default
24172 #undef enable_if_not_ill_form
24175 #undef was_an_ill_form
24176 #undef was_an_ill_form_with_parameter
24177 #undef was_not_an_ill_form
24178 #undef was_not_an_ill_form_and_noexcept
24179 #undef was_not_an_ill_form_with_parameter
24181 #undef recursive_lambda
24182 #undef get_recursive_lambda_caller
24184 #undef lambda_with_catch
24185 #undef self_recursion
24186 #undef lambda_RLSRRS
24194 #undef _small_than_
24196 #if defined(_MSC_VER)
24202 #undef INTER_NAMESPACE
24203 #undef BREAK_NAMESPACE
24208 #undef template_name
24211 #undef not_in_debug
24216 #undef ELC_TEST_EVENTNAME
24218 #undef override_instance_struct
24222 #undef force_inline
24224 #undef with_no_vtable
24226 #undef in_consteval
24228 #undef no_vtable_struct
24229 #undef no_vtable_class
24233 #line 107 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/paths.hpp"
24236 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/_tools/undef_decl_system_type.hpp"
24249 #undef ERROR_MSG_UNABLE_OS
24253 #line 110 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/paths.hpp"
24258 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_body.hpp"
24260 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
24268 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
24280 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
24282 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
24293 #define BIT_POSSIBILITY 2
24297 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
24299 #if defined(_MSC_VER)
24300 #pragma warning(push,ELC_WARNING_LEVEL)
24301 #pragma warning(disable:4099)
24302 #pragma warning(disable:26812)
24303 #pragma warning(disable:4584)
24304 #pragma warning(disable:4250)
24305 #pragma warning(disable:26432)
24306 #pragma warning(disable:26435)
24307 #pragma warning(disable:26481)
24308 #pragma warning(disable:26446)
24309 #pragma warning(disable:26434)
24310 #pragma warning(disable:26429)
24311 #pragma warning(disable:26471)
24312 #pragma warning(disable:26474)
24313 #pragma warning(disable:26473)
24314 #pragma warning(disable:26456)
24315 #pragma warning(disable:26485)
24316 #pragma warning(disable:26490)
24317 #pragma warning(disable:26472)
24318 #pragma warning(disable:26482)
24319 #pragma warning(disable:26493)
24321 #if defined(_MSC_VER)
24322 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
24323 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
24324 #define push_msvc_warning() __pragma(warning(push))
24325 #define pop_msvc_warning() __pragma(warning(pop))
24326 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
24328 #define suppress_msvc_warning(...)
24329 #define disable_msvc_warning(...)
24330 #define push_msvc_warning()
24331 #define pop_msvc_warning()
24332 #define push_and_disable_msvc_warning(...)
24335 #if defined(ELC_VOID_NAME)
24340 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
24341 #define noexcept_as_auto MAGIC
24342 #define constexpr_as(...) MAGIC constexpr
24343 #define constexpr_as_auto MAGIC MAGIC constexpr
24345 #define using_method_from_base_t(name,...) \
24346 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
24347 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
24349 return base_t::name(forward<Args>(rest)...);\
24352 #define using_method_from_value(name,value_name,...) \
24353 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
24354 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
24356 return value_name.name(forward<Args>(rest)...);\
24359 #define floop while(__builtin_is_my_dick_still_there())
24360 #define enable_adl(name) void name()noexcept=delete
24362 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
24363 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
24365 #define declvalue(...) (::std::declval<__VA_ARGS__>())
24368 #define template_error(reason) static_assert(template_error_helper<T>,reason)
24370 #define template_warning(reason) template_warning_helper<T>(reason)
24373 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
24374 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
24376 #define is_common_attribute(name) public attribute<T,name<T>>
24377 #define is_special_attribute(name) public attribute<T,name>
24379 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
24380 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
24383 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
24385 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
24388 #define def_common_attribute_with_nothing(name) \
24389 template<typename T>\
24392 #define def_special_attribute_with_nothing(name) \
24395 #define common_attribute_t template<class>class
24396 #define special_attribute_t class
24406 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
24408 #define enabled_by_default class enable_state=void
24410 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
24412 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
24414 #define enable_flag class enable_state
24416 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
24417 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
24418 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
24419 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
24420 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
24423 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
24425 #define get_recursive_lambda_caller(name) \
24426 lambda_with_catch(&)(auto&&...Args){\
24427 return name(name,Args...);\
24432 #define lambda_with_catch(...) [__VA_ARGS__]
24434 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
24436 #define lambda_RLSRRS _my_jb_super_sb_name_
24444 #define elseif else if
24446 #define _big_than_ >
24448 #define _small_than_ <
24450 #if defined(_MSC_VER)
24457 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
24459 #define BREAK_NAMESPACE }
24462 #define template_name template
24464 #define type_name class
24466 #if defined(DEBUG) || defined(_DEBUG)
24467 #define not_in_debug 0
24469 #define not_in_debug 1
24473 #define ec(ch) U ## ch
24475 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
24476 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
24478 #define ELC_TEST_EVENTNAME(name)
24481 #define override_instance_struct \
24483 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
24484 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
24485 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
24486 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
24487 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
24489 #if defined(_WIN32)
24490 #define distinctive __declspec(dllexport)
24492 #define distinctive
24495 #if defined(_WIN32)
24496 #define force_inline __forceinline
24497 #elif defined(__GNUC__)
24498 #define force_inline __attribute__((always_inline)) inline
24500 #define force_inline inline
24503 #if defined(_WIN32)
24504 #define with_no_vtable __declspec(novtable)
24506 #define with_no_vtable
24509 #define in_consteval (::std::is_constant_evaluated())
24511 #define no_vtable_struct struct with_no_vtable
24512 #define no_vtable_class class with_no_vtable
24516 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
24520 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_body.hpp"
24522 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/package_symbol_loader.hpp"
24530 namespace package_symbol_loader_n{
24533 function_t<ptr(
string lib_name,
size_t lib_ver,
string symbol_name)
noexcept>
load_interface;
24534 function_t<ptr()noexcept> load_error_interface;
24537 if(package_symbol_loader_handle = load_lib(paths::package_symbol_loader_path)){
24538 load_interface = package_symbol_loader_handle->get_symbol_as_function<ptr(
string lib_name,
size_t lib_ver,
string symbol_name)
noexcept>(
es"load_interface");
24539 load_error_interface = package_symbol_loader_handle->get_symbol_as_function<ptr()
noexcept>(
es"load_error_interface");
24542 die_with(locale::str::package_symbol_loader::load_failed);
24543 if(!load_interface)
24544 die_with(locale::str::package_symbol_loader::load_interface_failed);
24548 ptr load_symbol(
string lib_name,
size_t lib_ver,
string symbol_name)noexcept{
24549 return load_interface(lib_name,lib_ver,symbol_name);
24552 return load_error_interface();
24558 #line 19 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_body.hpp"
24559 #if defined(ELC_TEST_ON)
24560 namespace package_symbol_loader_part_test{
24561 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_test.hpp"
24569 inline void test(){
24572 inline void test_log_out(){}
24573 inline void test_end{}
24577 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_body.hpp"
24581 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
24589 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
24600 #if defined(_MSC_VER)
24601 #pragma warning(pop)
24603 #undef suppress_msvc_warning
24604 #undef disable_msvc_warning
24605 #undef push_msvc_warning
24606 #undef pop_msvc_warning
24607 #undef push_and_disable_msvc_warning
24610 #undef BIT_POSSIBILITY
24612 #if defined(ELC_VOID_NAME)
24613 #define void the_void
24618 #undef noexcept_as_auto
24619 #undef constexpr_as
24620 #undef constexpr_as_auto
24622 #undef using_method_from_base_t
24623 #undef using_method_from_value
24628 #undef re_declvalue
24633 #undef template_error
24634 #undef template_warning
24636 #undef type_info_of
24637 #undef type_name_of
24639 #undef is_common_attribute
24640 #undef is_special_attribute
24642 #undef has_attribute
24643 #undef not_has_attribute
24645 #undef float_size_of
24648 #undef def_common_attribute_with_nothing
24649 #undef def_special_attribute_with_nothing
24651 #undef common_attribute_t
24652 #undef special_attribute_t
24655 #undef enabled_by_default
24656 #undef disabled_by_default
24657 #undef enable_if_not_ill_form
24660 #undef was_an_ill_form
24661 #undef was_an_ill_form_with_parameter
24662 #undef was_not_an_ill_form
24663 #undef was_not_an_ill_form_and_noexcept
24664 #undef was_not_an_ill_form_with_parameter
24666 #undef recursive_lambda
24667 #undef get_recursive_lambda_caller
24669 #undef lambda_with_catch
24670 #undef self_recursion
24671 #undef lambda_RLSRRS
24679 #undef _small_than_
24681 #if defined(_MSC_VER)
24687 #undef INTER_NAMESPACE
24688 #undef BREAK_NAMESPACE
24693 #undef template_name
24696 #undef not_in_debug
24701 #undef ELC_TEST_EVENTNAME
24703 #undef override_instance_struct
24707 #undef force_inline
24709 #undef with_no_vtable
24711 #undef in_consteval
24713 #undef no_vtable_struct
24714 #undef no_vtable_class
24718 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
24722 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_body.hpp"
24725 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_export.hpp"
24734 #define export using defs::package_symbol_loader_n::
24740 #line 29 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_body.hpp"
24745 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/package_symbol_loader"
24750 #line 23 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
24751 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/stream"
24760 #if !defined(ELC_STREAM)
24762 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
24771 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
24775 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/stream"
24776 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/stream/_body.hpp"
24785 #if defined(ELC_TEST)
24786 #error "this part cannot be tested."
24789 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
24797 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
24809 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
24811 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
24822 #define BIT_POSSIBILITY 2
24826 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
24828 #if defined(_MSC_VER)
24829 #pragma warning(push,ELC_WARNING_LEVEL)
24830 #pragma warning(disable:4099)
24831 #pragma warning(disable:26812)
24832 #pragma warning(disable:4584)
24833 #pragma warning(disable:4250)
24834 #pragma warning(disable:26432)
24835 #pragma warning(disable:26435)
24836 #pragma warning(disable:26481)
24837 #pragma warning(disable:26446)
24838 #pragma warning(disable:26434)
24839 #pragma warning(disable:26429)
24840 #pragma warning(disable:26471)
24841 #pragma warning(disable:26474)
24842 #pragma warning(disable:26473)
24843 #pragma warning(disable:26456)
24844 #pragma warning(disable:26485)
24845 #pragma warning(disable:26490)
24846 #pragma warning(disable:26472)
24847 #pragma warning(disable:26482)
24848 #pragma warning(disable:26493)
24850 #if defined(_MSC_VER)
24851 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
24852 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
24853 #define push_msvc_warning() __pragma(warning(push))
24854 #define pop_msvc_warning() __pragma(warning(pop))
24855 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
24857 #define suppress_msvc_warning(...)
24858 #define disable_msvc_warning(...)
24859 #define push_msvc_warning()
24860 #define pop_msvc_warning()
24861 #define push_and_disable_msvc_warning(...)
24864 #if defined(ELC_VOID_NAME)
24869 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
24870 #define noexcept_as_auto MAGIC
24871 #define constexpr_as(...) MAGIC constexpr
24872 #define constexpr_as_auto MAGIC MAGIC constexpr
24874 #define using_method_from_base_t(name,...) \
24875 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
24876 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
24878 return base_t::name(forward<Args>(rest)...);\
24881 #define using_method_from_value(name,value_name,...) \
24882 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
24883 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
24885 return value_name.name(forward<Args>(rest)...);\
24888 #define floop while(__builtin_is_my_dick_still_there())
24889 #define enable_adl(name) void name()noexcept=delete
24891 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
24892 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
24894 #define declvalue(...) (::std::declval<__VA_ARGS__>())
24897 #define template_error(reason) static_assert(template_error_helper<T>,reason)
24899 #define template_warning(reason) template_warning_helper<T>(reason)
24902 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
24903 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
24905 #define is_common_attribute(name) public attribute<T,name<T>>
24906 #define is_special_attribute(name) public attribute<T,name>
24908 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
24909 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
24912 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
24914 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
24917 #define def_common_attribute_with_nothing(name) \
24918 template<typename T>\
24921 #define def_special_attribute_with_nothing(name) \
24924 #define common_attribute_t template<class>class
24925 #define special_attribute_t class
24935 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
24937 #define enabled_by_default class enable_state=void
24939 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
24941 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
24943 #define enable_flag class enable_state
24945 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
24946 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
24947 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
24948 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
24949 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
24952 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
24954 #define get_recursive_lambda_caller(name) \
24955 lambda_with_catch(&)(auto&&...Args){\
24956 return name(name,Args...);\
24961 #define lambda_with_catch(...) [__VA_ARGS__]
24963 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
24965 #define lambda_RLSRRS _my_jb_super_sb_name_
24973 #define elseif else if
24975 #define _big_than_ >
24977 #define _small_than_ <
24979 #if defined(_MSC_VER)
24986 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
24988 #define BREAK_NAMESPACE }
24991 #define template_name template
24993 #define type_name class
24995 #if defined(DEBUG) || defined(_DEBUG)
24996 #define not_in_debug 0
24998 #define not_in_debug 1
25002 #define ec(ch) U ## ch
25004 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
25005 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
25007 #define ELC_TEST_EVENTNAME(name)
25010 #define override_instance_struct \
25012 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
25013 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
25014 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
25015 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
25016 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
25018 #if defined(_WIN32)
25019 #define distinctive __declspec(dllexport)
25021 #define distinctive
25024 #if defined(_WIN32)
25025 #define force_inline __forceinline
25026 #elif defined(__GNUC__)
25027 #define force_inline __attribute__((always_inline)) inline
25029 #define force_inline inline
25032 #if defined(_WIN32)
25033 #define with_no_vtable __declspec(novtable)
25035 #define with_no_vtable
25038 #define in_consteval (::std::is_constant_evaluated())
25040 #define no_vtable_struct struct with_no_vtable
25041 #define no_vtable_class class with_no_vtable
25045 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
25049 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/stream/_body.hpp"
25051 #if defined(ELC_TEST_ON)
25052 namespace stream_part_test{
25053 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/stream/_test.hpp"
25061 inline void test(){
25064 inline void test_log_out(){
25066 inline void test_end{
25071 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/stream/_body.hpp"
25075 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
25083 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
25094 #if defined(_MSC_VER)
25095 #pragma warning(pop)
25097 #undef suppress_msvc_warning
25098 #undef disable_msvc_warning
25099 #undef push_msvc_warning
25100 #undef pop_msvc_warning
25101 #undef push_and_disable_msvc_warning
25104 #undef BIT_POSSIBILITY
25106 #if defined(ELC_VOID_NAME)
25107 #define void the_void
25112 #undef noexcept_as_auto
25113 #undef constexpr_as
25114 #undef constexpr_as_auto
25116 #undef using_method_from_base_t
25117 #undef using_method_from_value
25122 #undef re_declvalue
25127 #undef template_error
25128 #undef template_warning
25130 #undef type_info_of
25131 #undef type_name_of
25133 #undef is_common_attribute
25134 #undef is_special_attribute
25136 #undef has_attribute
25137 #undef not_has_attribute
25139 #undef float_size_of
25142 #undef def_common_attribute_with_nothing
25143 #undef def_special_attribute_with_nothing
25145 #undef common_attribute_t
25146 #undef special_attribute_t
25149 #undef enabled_by_default
25150 #undef disabled_by_default
25151 #undef enable_if_not_ill_form
25154 #undef was_an_ill_form
25155 #undef was_an_ill_form_with_parameter
25156 #undef was_not_an_ill_form
25157 #undef was_not_an_ill_form_and_noexcept
25158 #undef was_not_an_ill_form_with_parameter
25160 #undef recursive_lambda
25161 #undef get_recursive_lambda_caller
25163 #undef lambda_with_catch
25164 #undef self_recursion
25165 #undef lambda_RLSRRS
25173 #undef _small_than_
25175 #if defined(_MSC_VER)
25181 #undef INTER_NAMESPACE
25182 #undef BREAK_NAMESPACE
25187 #undef template_name
25190 #undef not_in_debug
25195 #undef ELC_TEST_EVENTNAME
25197 #undef override_instance_struct
25201 #undef force_inline
25203 #undef with_no_vtable
25205 #undef in_consteval
25207 #undef no_vtable_struct
25208 #undef no_vtable_class
25212 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
25216 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/stream/_body.hpp"
25219 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/stream/_export.hpp"
25228 #define export using defs::
25233 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/stream/_body.hpp"
25238 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/stream"
25243 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
25244 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
25253 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
25257 #line 25 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
25259 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/void_name"
25268 #if !defined(ELC_VOID_NAME)
25269 #define ELC_VOID_NAME
25271 #define void the_void
25276 #line 27 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
#define get_recursive_lambda_caller(name)
#define was_not_an_ill_form(...)
#define special_attribute_t
#define float_size_of(...)
#define was_not_an_ill_form_and_noexcept(...)
#define DYNAMIC_LIBRARY_SUFFIX
#define INTER_NAMESPACE(NAMESPACENAME)
#define was_not_an_ill_form_with_parameter(...)
#define defspecflag(name)
#define using_method_from_value(name, value_name,...)
#define was_an_ill_form(...)
#define template_error(reason)
#define lambda_with_catch(...)
#define pop_msvc_warning()
#define suppress_msvc_warning(...)
#define push_and_disable_msvc_warning(...)
#define ELC_TEST_EVENTNAME(name)
#define has_attribute(...)
#define is_common_attribute(name)
#define constexpr_as(...)
#define template_warning(reason)
#define recursive_lambda(...)
#define constexpr_as_auto
#define override_instance_struct
#define def_special_attribute_with_nothing(name)
#define self_recursion(...)
#define common_attribute_t
#define BIT_POSSIBILITY
每个bit(不是字节)的可能性 为什么c艹委员会不定义这个?
#define def_common_attribute_with_nothing(name)
constexpr flag(flag_set_type a=not_set) noexcept
void operator=(flag &) &noexcept=delete
void operator=(flag &&) &noexcept=delete
constexpr same_base_t(const same_base_t< other_T, other_base_t > &a) noexcept(construct< base_t_rw >.nothrow< other_base_t >)
constexpr value_type operator*() noexcept(noexcept((is_value_getter_noexcept())))
base_t_w next_getter() const noexcept(is_next_getter_noexcept())
static constexpr bool is_handle_getter_noexcept() noexcept
constexpr same_base_t(const this_t &a) noexcept(construct< base_t_rw >.nothrow< const base_t_rw >)
~same_base_t() noexcept(destruct.nothrow< base_t_rw >)=default
value_t * handle_getter() const noexcept(is_handle_getter_noexcept())
constexpr void swap_with(this_t &a) noexcept(noexcept((swap((::std::declval< base_t_rw & >()),(::std::declval< base_t_rw & >())))))
decltype(value_type_getter()) ::template type value_type
remove_cv< base_t_w > base_t_rw
constexpr auto operator<=>(const same_base_t< other_value_t, other_base_t_w > &a) const noexcept(compare.nothrow< base_t_rw, other_base_t_w >)
constexpr same_base_t() noexcept=default
static constexpr bool is_value_getter_noexcept() noexcept
constexpr same_base_t(this_t &&a) noexcept(noexcept(((::std::declval< this_t >()).swap_with(a))))
base_t_w before_getter() const noexcept(is_before_getter_noexcept())
static constexpr bool is_before_getter_noexcept() noexcept
constexpr value_t * operator->() noexcept(is_handle_getter_noexcept())
static constexpr auto value_type_getter()
same_base_t< value_t, base_t_w > this_t
static constexpr bool is_next_getter_noexcept() noexcept
value_type value_getter() const noexcept(is_handle_getter_noexcept())
constexpr bool operator==(value_t *a) const noexcept(is_handle_getter_noexcept()&&noexcept(pointer_equal((::std::declval< value_t * >()),(::std::declval< value_t * >()))))
constexpr void add(cons *a) noexcept
iterator_t< T, cons * > iterator
constexpr list_t() noexcept
constexpr iterator begin() noexcept
constexpr iterator head() noexcept
constexpr bool empty() const noexcept
constexpr iterator end() noexcept
constexpr rot_iterator operator--(int) noexcept
constexpr rot_iterator & operator--() noexcept
constexpr rot_iterator(size_t offset) noexcept
constexpr size_t value() const noexcept
constexpr rot_iterator operator++(int) noexcept
constexpr rot_iterator & operator++() noexcept
constexpr mark_able(mark_type a=not_mark) noexcept
void mark() const noexcept
bool was_marked() const noexcept
void unmark() const noexcept
constexpr maybe_fail_reference(T &a)
constexpr maybe_fail_reference(note::fail_t)
constexpr maybe_fail_reference(const maybe_fail_reference &)=default
void push_back(const T &a)
friend this_t operator+(const this_t &a, U &&b) noexcept(noexcept((a.copy()+=b)))
constexpr auto operator==(array_like_view_t< const T > a) const noexcept(equal.nothrow< array_like_view_t< T > >)
array_t(const this_t &a) noexcept(noexcept(((::std::declval< this_t >()).copy())))
friend this_t operator+(U &&a, const this_t &b) noexcept(noexcept((this_t(a)+=b)))
constexpr iterator get_iterator_at(size_t a) noexcept
const_iterator_t< T > const_iterator
this_t && operator+(U &&b) &&noexcept(noexcept((*this+=b)))
friend this_t & operator+=(this_t &a, zero_t b) noexcept(get< T >.apply_end.nothrow< T >)
void insert(size_t index, size_t count, const T *data) noexcept(insert_nothrow)
void insert_with_forward_resize(size_t index, size_t count, const T *data, size_t new_size) noexcept(insert_with_forward_resize_nothrow)
array_t(U &&a) noexcept(get< T >.as_array.nothrow< U >)
size_t size() const noexcept
friend this_t & operator+=(this_t &a, U &&b) noexcept(get< T >.apply_end.nothrow< U >)
void forward_resize(size_t size) noexcept(forward_resize_nothrow)
constexpr auto operator==(const this_t &a) const noexcept(equal.nothrow< array_like_view_t< T > >)
void resize(size_t size) noexcept(resize_nothrow)
this_t & operator=(const this_t &a) &noexcept(noexcept(((::std::declval< this_t >()).copy())))
const_iterator end() const noexcept
iterator find(U &&a) noexcept
const T & operator[](size_t pos) const noexcept
~array_t() noexcept(unget.nothrow< T >)
void swap_with(this_t &a) noexcept
constexpr auto operator<=>(const this_t &a) const noexcept(compare.nothrow< array_like_view_t< T > >)
array_t(this_t &&a) noexcept
const_iterator cbegin() const noexcept
size_t size_in_byte() const noexcept
constexpr auto operator<=>(array_like_view_t< const T > a) const noexcept(compare.nothrow< array_like_view_t< T > >)
T & operator[](size_t pos) noexcept
this_t & operator=(this_t &&a) &noexcept
const_iterator find(U &&a) const noexcept
void clear() noexcept(re_construct.nothrow< this_t >)
array_t(note::size_t< size_t >size) noexcept(get< T >.nothrow<>)
const_iterator cend() const noexcept
constexpr array_t() noexcept
array_t(note::size_t< size_t >size, const T &elem) noexcept(get< T >.nothrow<>)
constexpr iterator begin() noexcept
void insert(size_t index, size_t count) noexcept(insert_nothrow)
constexpr const_iterator begin() const noexcept
void insert_with_resize(size_t index, size_t count, const T *data, size_t new_size) noexcept(insert_nothrow)
constexpr const_iterator get_iterator_at(size_t a) const noexcept
bool operator==(const this_t &a) const
base_func_data_t< Ret_t(Args_t...)> base_t_w
maybe_fail_reference< T > get_as() noexcept
function_data_saver_t< Ret_t(Args_t...)> this_t
bool was_an() const noexcept
function_data_saver_t(this_t &&a) noexcept
comn_ptr_t< base_t_w > ptr_t
void swap_with(this_t &a) noexcept
function_data_saver_t() noexcept=default
Ret_t call(Args_t &&...rest) const
void swap(base_t_w &a) noexcept
~hash_table_t() noexcept(destruct.nothrow< base_t_w >)=default
void add(const T &a) noexcept(hash_nothrow< const T & > &&bucket_t::add_nothrow)
bool remove(const T &a) noexcept(bucket_t::remove_nothrow)
array_t< bucket_t > base_t_w
hash_table_t(special_init_t, size_t bucket_size) noexcept
this_t & operator=(base_t_w &&a) &noexcept
maybe_fail_reference< T > find(U &&a) noexcept(find_nothrow< U >)
hash_table_t(const this_t &a) noexcept
this_t & operator=(const base_t_w &a) &noexcept
bool in_table(const T &a) noexcept(noexcept(((::std::declval< this_t >()).find(a).not_fail())))
hash_table_t(this_t &&a) noexcept
bool not_in_table(const T &a) noexcept(noexcept(((::std::declval< this_t >()).in_table(a))))
void clear() noexcept(re_construct.nothrow< this_t >)
void clear() noexcept(re_construct.nothrow< this_t >)
this_t & operator=(const this_t &a) noexcept
const T & operator[](const key_t &a) const noexcept
T & operator[](const key_t &a) noexcept(noexcept((_m.add({a, T()}))))
bool operator==(const this_t &a) const noexcept(shrink_nothow &&equal.nothrow< T >)
void shrink() const noexcept(shrink_nothow)
void swap(map_t< T, key_t, stack_t, _ > &a) noexcept
this_t & operator=(const this_t &a) &noexcept(noexcept(((::std::declval< this_t >()).copy())))
base_stack_t(const this_t &a) noexcept(noexcept(((::std::declval< this_t >()).copy())))
hash_t get_top_hash() noexcept(noexcept((hash((::std::declval< T & >())))))
void clear() noexcept(re_construct.nothrow< this_t >)
bool empty() const noexcept
bool remove(const T_ &a) noexcept(remove_nothrow &&equal.nothrow< T_, T >)
bool not_in_stack(const T &a) const noexcept(noexcept(((::std::declval< this_t >()).in_stack(a))))
bool in_stack(const T &a) const noexcept(noexcept(((::std::declval< this_t >()).find(a).not_fail())))
~base_stack_t() noexcept(unget.nothrow< data_t >)
void swap_with(this_t &a) noexcept
constexpr base_stack_t() noexcept
void add(const T &a) noexcept(add_nothrow)
void move_top_to(this_t &a) noexcept
size_t size() const noexcept
struct elc::defs::container::stack_n::base_stack_t::data_t * _m
maybe_fail_reference< T > find(U &&a) noexcept(noexcept(((::std::declval< T & >())==a)))
base_stack_t(this_t &&a) noexcept
void add(data_t *a) noexcept
this_t & operator=(this_t &&a) &noexcept
constexpr exception() noexcept=default
virtual void * _abstract_method_get_forward_resize_this(size_t size)=0
virtual size_t abstract_method_get_size_of_get_for_this() noexcept=0
virtual void * _abstract_method_copy_get_this()=0
virtual void abstract_method_unget_this()=0
virtual void * _abstract_method_get_resize_this(size_t size)=0
virtual size_t abstract_method_get_size_of_get_for_this() noexcept override
virtual void * _abstract_method_get_forward_resize_this(size_t size) noexcept(get_forward_resize.able< T >?get_forward_resize.nothrow< T >:1) override
virtual void abstract_method_unget_this() noexcept(noexcept((unget(get_handle(this))))) override
virtual void * _abstract_method_get_resize_this(size_t size) noexcept(get_resize.able< T >?get_resize.nothrow< T >:1) override
virtual void * _abstract_method_copy_get_this() noexcept(copy_get.able< T >?copy_get.nothrow< T >:1) override
void add_gc_method(type_info_t< T >) noexcept
void remove_gc_success_identifier(success_identifier_t a)
void operator()() const noexcept
void add_gc_method(gc_method_t a) noexcept
void remove_gc_method(type_info_t< T >) noexcept
void add_gc_success_identifier(success_identifier_t a) noexcept
bool success() const noexcept
void remove_gc_method(gc_method_t a)
root_of() noexcept(noexcept((roots_of< T >.add((::std::declval< this_t * >())))))
virtual void map_and_mark() noexcept=0
constexpr roots_t() noexcept=default
constexpr placement_construct_t operator[](T *p) const noexcept
T operator()(Args &&...rest) const noexcept(nothrow< Args... >)
void cut_ref() const noexcept
constexpr ref_t() noexcept=default
constexpr void add_ref() const noexcept
constexpr void init_never_ref_num_zero() noexcept
link_num_t link_num() const noexcept
bool cut_ref() const noexcept
void cut_ref() const noexcept
arec_t && operator=(const arec_t &&ch) &&noexcept
arec_t && operator=(char_T a) &&noexcept
const char_T * operator&() const &&noexcept
char_T * operator&() &&noexcept
arec_t(string_t *to, size_t index) noexcept
arec_t(special_init_t, const arec_t &ref) noexcept
floating_arec_t && operator=(floating_arec_result_type a) &&noexcept
floating_arec_t(special_init_t, const floating_arec_t &ref) noexcept
floating_arec_t(string_t *to, float_t index) noexcept
pointer correct_pointer(pointer a, size_t align)
constexpr size_t overhead_get_offset_value(size_t align)
void set_overhead(pointer a, size_t size)
pointer recorrect_pointer(pointer a, size_t align)
constexpr size_t correct_size(size_t size, size_t align)
constexpr size_t overhead_get_align(size_t align)
constexpr size_t correct_align(size_t align)
size_t get_overhead(const_pointer a)
void free(byte *p, size_t align) noexcept
size_t get_size_of_alloc(const byte *p, size_t align) noexcept
struct elc::APIs::alloc::source_location_info_t operate_source_location
byte * aligned_alloc(size_t align, size_t size) noexcept
byte * realloc(byte *ptr, size_t nsize, size_t align) noexcept
void die_with(const char_t *err_msg) noexcept
同 die ,但是有详细的错误信息
void die() noexcept
终止整个程序并可能的触发断点或输出错误信息
void base_free_library(library_handle handle) noexcept
void * get_symbol(library_handle handle, string symbol_name) noexcept
library_handle load_library(string file_name) noexcept
void * base_get_symbol(library_handle handle, const char *symbol_name) noexcept
library_handle base_load_library(const char *file_name) noexcept
string base_get_load_error() noexcept
void free_library(library_handle handle) noexcept
string get_load_error() noexcept
string_t< char_t > to_char_t_str(string_view_t< char > a) noexcept
string_t< char > to_char_str(string_view_t< char_t > a) noexcept
constexpr auto begin_of_array_like(T &&a) noexcept
constexpr size_t size_of_array_like(T &&) noexcept
constexpr bool is_array_like_for
constexpr bool is_array_like
constexpr bool is_not_signal_value_for_array_like
constexpr bool is_signal_value_for_array_like
auto end_of_array_like(T &&a) noexcept
constexpr auto empty_constexpr_str_of
function_type_getter< T >::type get_function_type
constexpr auto function_type_getter_conditional_helper()
void the_pointer_hash() noexcept=delete
struct elc::defs::base::hash_n::hash_t hash
constexpr hash_value_t pointer_hash(T *a) noexcept
constexpr bool is_unstable_hash
constexpr bool is_fundamental_hash
void swap(same_base_t< value_t, base_t_w > &a, same_base_t< value_t, base_t_w > &b) noexcept(noexcept((a.swap_with(b))))
auto operator<=>(const reverse_base_t< base_t > &a, const reverse_base_t< base_t > &b) noexcept(compare.nothrow< base_t >)
constexpr auto get_result(auto y1, auto k, auto δx) noexcept
constexpr auto get_reverse_result(auto k, auto δx, auto y) noexcept
constexpr auto get_k(auto y1, auto y2, auto δx) noexcept
requires ::std::is_arithmetic_v< T > constexpr T copy_as_negative(auto x, bool negative=1) noexcept
constexpr void set_rounding(int mode)
requires ::std::is_floating_point_v< T > constexpr auto trunc(const T v) noexcept
requires ::std::is_unsigned_v< T > constexpr auto rotr(const T v, const auto R) noexcept
位操作:循环右移 不使用std版本而是自己写的原因:std版本右操作数只能是int而不能是size_t或别的,标准会傻逼
requires ::std::is_arithmetic_v< T > constexpr bool feq(const T a, const T b) noexcept
constexpr size_t get_next_gold_size_to_resize_for_array(size_t size)
已知当前array的size,求下一个合适的提前分配大小
constexpr auto pow(const T a, const U b) noexcept
constexpr size_t get_next_gold_size_to_resize_for_hash(size_t size)
已知当前hash table的size,求下一个合适的桶大小
requires ::std::is_arithmetic_v< T > constexpr auto abs(const T v) noexcept
constexpr auto sub(const T1 a, const T2 b) noexcept
requires ::std::is_floating_point_v< T > constexpr auto ceil(const T v) noexcept
requires ::std::is_arithmetic_v< T > constexpr auto log(const T a) noexcept
requires ::std::is_arithmetic_v< T1 > and ::std::is_arithmetic_v< T2 > constexpr auto mod(T1 a, T2 b)
requires ::std::is_arithmetic_v< T > constexpr bool is_negative(T x) noexcept
神已死,神万岁.
requires ::std::is_unsigned_v< T > constexpr auto rotl_nomod(const T v, const auto R) noexcept
位操作:循环左移(无mod) 不使用std版本而是自己写的原因:std版本右操作数只能是int而不能是size_t或别的,标准会傻逼
requires ::std::is_unsigned_v< T > constexpr auto rotr_nomod(const T v, const auto r) noexcept
位操作:循环右移(无mod) 不使用std版本而是自己写的原因:std版本右操作数只能是int而不能是size_t或别的,标准会傻逼
requires ::std::is_arithmetic_v< T > constexpr bool is_prime_num(T a)
requires ::std::is_arithmetic_v< T > constexpr size_t to_size_t(T x) noexcept
requires ::std::is_unsigned_v< T > constexpr auto rotl(const T v, const auto R) noexcept
位操作:循环左移 不使用std版本而是自己写的原因:std版本右操作数只能是int而不能是size_t或别的,标准会傻逼
constexpr int get_rounding()
requires ::std::is_arithmetic_v< T >constexpr ::std::uintmax_t to_uintmax_t(T x) noexcept
constexpr auto gold_of_resize
requires ::std::is_floating_point_v< T > constexpr T exp(const T v) noexcept
requires ::std::is_arithmetic_v< T > constexpr T get_prime_num_big_or_eq_than(T a)
求大于某数的素数
constexpr struct elc::defs::base::note_n::fail_t fail
constexpr size_t< T > size(T v)
constexpr auto get_null_ptr() noexcept
constexpr struct elc::defs::base::null_ptr_n::null_ptr_t null_ptr
void the_get_null_ptr() noexcept=delete
constexpr size_t find_first_not_of_size_t(array_like_view_t< T >pattern, array_like_view_t< T >range)
若成功找到不匹配的数据项,返回其距离开头的步数,若未找到,返回npos
constexpr T * base_find_last_of(array_like_view_t< T >pattern, array_like_view_t< T >range)
find_last_of的朴素实现 若成功找到匹配的数据项,返回其开头,若未找到,返回nullptr
constexpr T * find_last_of_bitmark(const bitmark_for_finds< T > &mark, array_like_view_t< T >range)
find_last_of的bitmark实现 若成功找到匹配的数据项,返回其开头,若未找到,返回nullptr
constexpr T * in_range_but_reverse(T &pattern, array_like_view_t< T >range)
若成功找到匹配的数据项,返回其开头,若未找到,返回nullptr
constexpr T * find_last_of(array_like_view_t< T >pattern, array_like_view_t< T >range)
若成功找到匹配的数据项,返回其开头,若未找到,返回nullptr
constexpr T * base_find_first_not_of(array_like_view_t< T >pattern, array_like_view_t< T >range)
find_first_not_of的朴素实现 若成功找到不匹配的数据项,返回其开头,若未找到,返回nullptr
constexpr T * find_first_not_of_bitmark(const bitmark_for_finds< T > &mark, array_like_view_t< T >range)
find_first_not_of的bitmark实现 若成功找到不匹配的数据项,返回其开头,若未找到,返回nullptr
constexpr size_t find_last_not_of_size_t(array_like_view_t< T >pattern, array_like_view_t< T >range)
若成功找到不匹配的数据项,返回其距离开头的步数,若未找到,返回npos
constexpr T * base_find_last_not_of(array_like_view_t< T >pattern, array_like_view_t< T >range)
find_last_not_of的朴素实现 若成功找到不匹配的数据项,返回其开头,若未找到,返回nullptr
constexpr size_t find_last_of_size_t(array_like_view_t< T >pattern, array_like_view_t< T >range)
若成功找到匹配的数据项,返回其距离开头的步数,若未找到,返回npos
constexpr T * find_first_of(array_like_view_t< T >pattern, array_like_view_t< T >range)
若成功找到匹配的数据项,返回其开头,若未找到,返回nullptr
constexpr size_t in_range_but_reverse_size_t(T &pattern, array_like_view_t< T >range)
若成功找到匹配的数据项,返回其距离开头的步数,若未找到,返回npos
constexpr size_t find_first_of_size_t(array_like_view_t< T >pattern, array_like_view_t< T >range)
若成功找到匹配的数据项,返回其距离开头的步数,若未找到,返回npos
constexpr T * find_first_of_bitmark(const bitmark_for_finds< T > &mark, array_like_view_t< T >range)
find_first_of的bitmark实现 若成功找到匹配的数据项,返回其开头,若未找到,返回nullptr
constexpr T * base_find_first_of(array_like_view_t< T >pattern, array_like_view_t< T >range)
find_first_of的朴素实现 若成功找到匹配的数据项,返回其开头,若未找到,返回nullptr
constexpr T * find_last_not_of_bitmark(const bitmark_for_finds< T > &mark, array_like_view_t< T >range)
find_last_not_of的bitmark实现 若成功找到不匹配的数据项,返回其开头,若未找到,返回nullptr
static constexpr size_t npos
用以指定不存在的位置
constexpr bool in_range(T pattern, const range_t< T >range) noexcept(noexcept((bool((::std::declval< T >())>=(::std::declval< const T >()) &&(::std::declval< T >())<=(::std::declval< const T >())))))
判断一个值是否在某个范围内
constexpr size_t in_range_size_t(T &pattern, array_like_view_t< T >range)
若成功找到匹配的数据项,返回其距离开头的步数,若未找到,返回npos
constexpr T * find_first_not_of(array_like_view_t< T >pattern, array_like_view_t< T >range)
若成功找到不匹配的数据项,返回其开头,若未找到,返回nullptr
constexpr T * find_last_not_of(array_like_view_t< T >pattern, array_like_view_t< T >range)
若成功找到不匹配的数据项,返回其开头,若未找到,返回nullptr
string_view_t< char_t > string_view
constexpr struct elc::defs::base::compare_t compare
hash_n::unstable_hash_value_t unstable_hash_t
constexpr struct elc::defs::base::equal_t equal
static void destroy(T *a) noexcept
auto & assign(T &&a, U &&b) noexcept(noexcept((a=b)))
constexpr bool is_all_byte_zero(T &&a)
auto template_warning_helper(U &&a) noexcept
::std::remove_cvref_t< T > remove_cvref
constexpr struct elc::defs::base::zero_t zero
constexpr T down_cast(U a) noexcept
constexpr logical_bool neither
constexpr struct elc::defs::base::just_an_part_t just_an_part
constexpr struct elc::defs::base::min_t min
constexpr struct elc::defs::base::special_init_t special_init
constexpr auto is_eq(T &&a, T &&b) noexcept(noexcept((&a==&b)))
void the_destroy() noexcept=delete
constexpr ptrdiff_t get_off_set(note::from_t< const_pointer >a, note::to_t< const_pointer >b) noexcept
获取两个指针的偏移
constexpr bool template_error_helper
constexpr auto unapply_off_set(T *b, ptrdiff_t c) noexcept
反向应用偏移
constexpr byte * cast_to_data(T *p)
constexpr struct elc::defs::base::end_by_zero_t end_by_zero
::std::remove_reference_t< T > remove_ref
constexpr type_info_t< T > type_info
constexpr logical_bool either
constexpr auto pointer_to_bool(T *a) noexcept
指针转bool的重载接口,允许类对此进行自定义 elc内部的指针转bool应当视情况使用默认配置或此重载接口
constexpr auto pointer_equal(T *a, T *b) noexcept
指针比较的重载接口,允许类对此进行自定义 elc内部的指针比较应当视情况使用默认配置或此重载接口
decltype(nullptr) nullptr_t
constexpr struct elc::defs::base::never_ref_num_zero_t never_ref_num_zero
size_t the_number_of(type_info_t< T >) noexcept
::std::remove_cv_t< T > remove_cv
constexpr struct elc::defs::base::max_t max
::std::conditional_t< B, T, F > conditional
hash_n::hash_value_t hash_t
decltype(null_ptr) null_ptr_t
constexpr T & data_cast(byte *p)
constexpr const T add_const(T a) noexcept
requires ::std::is_integral_v< T > constexpr size_t number_of_possible_values_per
auto & attribute_cast(T &t) noexcept
constexpr auto apply_off_set(T *a, ptrdiff_t c) noexcept
应用偏移
constexpr bool full_equal_in_byte(const T &a, const T &b)
constexpr bool operator==(const type_info_t< T > &, const type_info_t< T > &)
T * get_handle(attribute< T, attribute_name > *a) noexcept
auto attribute_ptr_cast(T *ptr) noexcept
constexpr logical_bool unknown
void the_pointer_equal() noexcept=delete
constexpr invoke_t< T > invoke
constexpr T & remove_const(const T &a) noexcept
constexpr bool is_pointer
判断类型是否为指针
void the_pointer_to_bool() noexcept=delete
constexpr size_t bitnumof
constexpr auto is_not_eq(T &&a, T &&b) noexcept(noexcept((!is_eq(a, b))))
const void * const_pointer
未知类型指针,不可写
default_func_data_t< Ret_t(Args_t...)> default_func_data
base_function_t(T) -> base_function_t< Func_t, promise_nothrow_at_destruct >
bool was_an(const_ptr p) noexcept
map_t< ptr, T > long_term_binary_node_storager
const T & const_use_by_ref_as(const_ptr p) noexcept
comn_ptr_t< const node_like > const_ptr
constexpr bool as_value_nothrow_helper() noexcept
decltype(auto) as_value(T &&a) noexcept(as_value_nothrow_helper< T >())
ptr make_binary_node_from(T a) noexcept
weak_ptr_t< const node_like > const_weak_ptr
T use_as(const_ptr p) noexcept
comn_ptr_t< node_like > ptr
ptr make_long_term_binary_node_from(T a) noexcept
weak_ptr_t< node_like > weak_ptr
decltype(auto) as_ptr(T &&a) noexcept(as_ptr_nothrow_helper< T >())
elc::defs::core::nil_t nil
T & use_by_ref_as(ptr p) noexcept
maybe_fail_reference< T > maybe_fail_use_by_ref_as(ptr p) noexcept
library_handle_t get_library_handle_form_symbol(function_t< Func_t > symbol) noexcept
comn_ptr_t< library_info_t > library_handle_t
library_handle_t load_lib(string lib_name) noexcept
string get_symbol_name_form_symbol(function_t< Func_t > symbol) noexcept
constexpr auto expr_incomplete
constexpr auto ending_of_expr_beyond_expectations
constexpr auto symbol_is_undefined
constexpr auto expr_too_outrageous
constexpr auto setlocale_error
constexpr auto code_convert_error
constexpr auto unknow_error
constexpr auto core_runtime_internal_helper_leak
constexpr auto empty_gc_method
constexpr auto load_interface_failed
constexpr auto load_failed
const ::std::locale default_locale
thread_local ptrdiff_t off_set
void * get_ptr_after_off_set(void *a) noexcept
thread_local pointer base_ptr
void is_base_ptr(void *a) noexcept
void is_instance_ptr(void *a) noexcept
void * alloc_method(type_info_t< T >) noexcept
size_t get_size_of_alloc_method(const T *arg) noexcept
size_t base_get_size_of_alloc(const byte *arg, size_t align) noexcept
void free_method(T *arg) noexcept
void * realloc_method(T *&ptr, size_t new_size) noexcept
byte * base_aligned_alloc(size_t align, size_t size) noexcept
byte * base_realloc(byte *ptr, size_t nsize, size_t align) noexcept
void base_free(byte *p, size_t align) noexcept
constexpr alloc_t< T > alloc
用于对特定类型进行alloc的类实例
constexpr struct elc::defs::memory::alloc_n::get_size_of_alloc_t get_size_of_alloc
void the_alloc_method() noexcept=delete
void the_free_method() noexcept=delete
constexpr struct elc::defs::memory::alloc_n::free_t free
void the_realloc_method() noexcept=delete
constexpr struct elc::defs::memory::alloc_n::realloc_t realloc
void the_get_size_of_alloc_method() noexcept=delete
bool default_gc_success_identifier() noexcept
void destory_by_gc() noexcept=delete
constexpr bool use_default_gc_able
void default_gc_method() noexcept
constexpr bool use_default_gc_success_identifier_able
size_t count_for_success_identify
void gc_method_of() noexcept
bool gc_success_identifier_of() noexcept
void gc_for_alloc() noexcept
当alloc失败时调用此函数
size_t forward_alloc_size_grow_with_insert_uninitialized_data(T *&arg, size_t to_size, size_t insert_pos, size_t insert_size) noexcept(move.trivial< T > or move.nothrow< T >)
constexpr struct elc::defs::memory::get_n::copy_get_t copy_get
constexpr struct elc::defs::memory::get_n::get_resize_t get_resize
constexpr struct elc::defs::memory::get_n::unget_t unget
void forward_alloc_size_cut(T *&arg, size_t to_size) noexcept(move.trivial< T > or move.nothrow< T >)
void alloc_size_cut(T *&arg, size_t to_size) noexcept
void alloc_size_grow(T *&arg, size_t to_size) noexcept(move.trivial< T > or move.nothrow< T >)
constexpr struct elc::defs::memory::get_n::get_size_of_get_t get_size_of_get
void forward_alloc_size_grow(T *&arg, size_t to_size) noexcept(move.trivial< T > or move.nothrow< T >)
void alloc_size_grow_with_insert_uninitialized_data(T *&arg, size_t insert_pos, size_t insert_size) noexcept(move.trivial< T > or move.nothrow< T >)
constexpr bool copy_construct_nothrow
constexpr bool destruct_trivial
constexpr bool move_assign_trivial
constexpr bool move_assign_able
constexpr struct elc::defs::memory::lifetime_n::move_construct_t move_construct
constexpr bool move_construct_nothrow
T * super_speed_trivial_copy_from_one(T *to, const T &value, size_t size) noexcept
constexpr bool construct_able
constexpr bool destruct_nothrow
constexpr bool copy_assign_able
constexpr struct elc::defs::memory::lifetime_n::copy_assign_t copy_assign
constexpr bool construct_nothrow
constexpr bool copy_construct_able
constexpr bool copy_construct_trivial
constexpr bool construct_trivial
constexpr bool destruct_able
constexpr bool move_assign_nothrow
constexpr struct elc::defs::memory::lifetime_n::destruct_t destruct
constexpr struct elc::defs::memory::lifetime_n::copy_construct_t copy_construct
constexpr bool move_construct_trivial
constexpr bool copy_assign_trivial
constexpr construct_t< T > construct
constexpr struct elc::defs::memory::lifetime_n::move_t move
constexpr bool copy_assign_nothrow
constexpr bool move_construct_able
constexpr struct elc::defs::memory::lifetime_n::copy_t copy
void map_all(func_t &&a) noexcept(noexcept(((::std::declval< func_t >())((::std::declval< T * >())))))
void map_all_helper(func_t &&a)
void destroy_and_free(T *a) noexcept
void the_destroy_and_free() noexcept=delete
link_num_t get_ref_num(const T *a) noexcept
void waiting_for_destroy(T *a) noexcept
constexpr bool was_weak_ref_able
void map_and_mark_for_gc() noexcept=delete
void the_waiting_for_destroy() noexcept=delete
link_num_t get_weak_ref_num(const T *a) noexcept
constexpr bool was_ref_able
null_string_data_t< char_T > null_string_data
string_t(const char_T *) -> string_t< char_T >
string_t< char_t > string
value arec_as_value(string_t< char_T > &str, const value index)
bool file_exists(const string &name) noexcept
string get_system_drive() noexcept
string get_elc_runtime_lib_path() noexcept
string get_program_data_path() noexcept
constexpr auto package_symbol_loader_file_name
string elc_runtime_lib_path
string package_symbol_loader_path
constexpr source_location_guard(size_t lookup=0) noexcept
constexpr const char * file() noexcept
constexpr uint_least32_t line() noexcept
static constexpr size_t get_length_of(T *ptr)
constexpr array_end_by_zero_t(T *ptr)
array_like_view_t< T > base_t
constexpr size_t size() const noexcept
constexpr const_iterator c_str() const noexcept
constexpr const_iterator begin() const noexcept
constexpr T & operator[](size_t pos) noexcept
constexpr array_like_view_t(T *a, size_t b) noexcept
constexpr const T & operator[](size_t pos) const noexcept
constexpr array_like_view_t(const this_t &) noexcept=default
constexpr iterator begin() noexcept
constexpr auto operator<=>(this_t a) noexcept(compare.nothrow< T >)
constexpr bool empty() const noexcept
constexpr auto operator==(this_t a) noexcept(equal.nothrow< T >)
constexpr array_like_view_t(U &&a) noexcept(noexcept((begin_of_array_like< T >(a), size_of_array_like< T >(a))))
constexpr iterator end() noexcept
void swap_with(this_t &b) noexcept(noexcept((swap(_begin, b._begin), swap(_size, b._size))))
constexpr const_iterator cbegin() const noexcept
array_like_view_t< T > this_t
constexpr const_iterator end() const noexcept
constexpr const_iterator cend() const noexcept
friend const U * get_handle(const attribute< U, another_attribute_name > *) noexcept
friend U * get_handle(attribute< U, another_attribute_name > *) noexcept
constexpr const T * get_handle() const noexcept
constexpr T * get_handle() noexcept
自动重整类型名并在析构时释放重整结果,对于gcc和clang的傻逼实现
constexpr base_type_info_t(const base_type_info_t &) noexcept=default
constexpr base_type_info_t(const ::std::type_info &a) noexcept
bool operator==(const base_type_info_t &a) const noexcept
size_t get_hash() const noexcept
bool operator==(const ::std::type_info &a) const noexcept
type_name_t get_name() const noexcept
constexpr auto operator()(T *a, size_t size1, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
constexpr auto reverse(strong_ordering odr) const noexcept
constexpr auto operator()(T(&a)[N1], U(&b)[N2]) const noexcept(nothrow< T, U >)
constexpr auto reverse(partial_ordering odr) const noexcept
constexpr auto operator()(T *a, size_t size1, U *b, size_t size2) const noexcept(nothrow< T, U >)
constexpr auto reverse(weak_ordering odr) const noexcept
decltype(base_call((::std::declval< T >()),(::std::declval< U >()))) type
constexpr auto lexicographical(T *a, size_t size1, just_an_part_t, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
constexpr auto operator()(T *a, U *b, size_t size) const noexcept(nothrow< T, U >)
constexpr auto operator()(T *a, size_t size1, just_an_part_t, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
constexpr auto lexicographical(T *a, size_t size1, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
constexpr auto operator()(T &&a, U &&b) const noexcept(nothrow< T, U >)
constexpr auto lexicographical(T(&a)[N1], U(&b)[N2]) const noexcept(nothrow< T, U >)
constexpr auto lexicographical(T *a, size_t size1, U *b, size_t size2) const noexcept(nothrow< T, U >)
static constexpr bool able
constexpr auto operator()(T *a, end_by_zero_t, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
constexpr auto operator()(T *a, end_by_zero_t, U *b, size_t size2) const noexcept(nothrow< T, U >)
static constexpr bool nothrow
constexpr auto lexicographical(T *a, end_by_zero_t, U *b, size_t size2) const noexcept(nothrow< T, U >)
static constexpr auto base_call(T &&a, U &&b) noexcept(nothrow< T, U >)
constexpr auto lexicographical(T *a, end_by_zero_t, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
constexpr cons_t()=default
const char_T * _array_begin
constexpr auto get_constexpr_str_t() const noexcept
constexpr constexpr_str_t_literal_helper(const char_T(&str)[N]) noexcept
range_n::bitmark_for_finds< const char_T > bitmark_for_finds
range_n::reverse_match_pattern< const char_T > reverse_match_pattern
constexpr_str_view_t< char_T > base_t
constexpr constexpr_str_t(const char_T *str, size_t size)
range_n::match_pattern< const char_T > match_pattern
constexpr constexpr_str_t(const char_T *str)
constexpr hash_t hash() const noexcept
constexpr constexpr_str_view_t substr(const char_T *begin) const noexcept
constexpr const char_T * data() const noexcept
constexpr constexpr_str_view_t substr(size_t pos, size_t len) const noexcept
constexpr constexpr_str_view_t substr(const char_T *begin, size_t len) const noexcept
constexpr const char_T * str() const noexcept
constexpr constexpr_str_view_t substr(size_t pos, const char_T *end) const noexcept
constexpr constexpr_str_view_t substr(size_t pos) const noexcept
constexpr_str_view_t(const char_T *str) noexcept=delete
string_view_t< char_T > base_t
constexpr constexpr_str_view_t substr(const char_T *begin, const char_T *end) const noexcept
constexpr data_view(const T *p)
constexpr data_view(T *p)
constexpr bool operator()(T *a, end_by_zero_t, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
constexpr bool operator()(T *a, U *b, size_t size) const noexcept(nothrow< T, U >)
constexpr bool operator()(T *a, size_t size1, just_an_part_t, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
constexpr bool operator()(T *a, size_t size1, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
static constexpr bool able
constexpr bool operator()(T *a, end_by_zero_t, U *b, size_t size2) const noexcept(nothrow< T, U >)
constexpr bool operator()(T *a, size_t size1, U *b, size_t size2) const noexcept(nothrow< T, U >)
static constexpr bool nothrow
constexpr bool operator()(T(&a)[N1], U(&b)[N2]) const noexcept(nothrow< T, U >)
constexpr auto operator()(T &&a, U &&b) const noexcept(nothrow< T, U >)
auto & get_data() noexcept
~function_data_warpper_t() noexcept(destruct.nothrow< T >)=default
function_data_warpper_t(T a) noexcept(construct< T >.nothrow< T >)
Ret_t operator()(Args_t...args) const noexcept(nothrow||invoke< const T >.nothrow< Args_t... >)
Ret_t(Args_t...) noexcept(nothrow) type
Ret_t(Args_t...) noexcept(nothrow) type
Ret_t(Args_t...) noexcept(nothrow) type
Ret_t(Args_t...) noexcept(nothrow) type
decltype(function_type_getter_conditional_helper< T >()) ::template type type
constexpr hash_base_t get_hash_in_base_type(const T &a) const noexcept(nothrow< T >)
constexpr hash_value_t repeat_times(hash_value_t value, size_t size) const noexcept
constexpr hash_value_t repeat_times(T &&value, size_t size) const noexcept
constexpr hash_value_t with_calculated_before(hash_value_t before, size_t before_size, const T *a, size_t size) const noexcept
hash_value_t merge_array_hash_results(hash_value_t before, size_t before_size, hash_value_t after, size_t after_size) const noexcept
constexpr hash_value_t with_calculated_before(hash_value_t before, size_t before_size, const array_like_view_t< T >a) const noexcept
static constexpr bool nothrow_helper() noexcept
static constexpr bool able_helper() noexcept
constexpr hash_base_t operator%(auto &&a) const noexcept
constexpr bool operator==(const hash_value_t &a) const noexcept
unstable_hash_value_t(const hash_value_t &a) noexcept
auto _as(Args &&...rest) const noexcept(nothrow< Args... >)
base_iterator_t< value_t, base_t_w > this_t
constexpr this_t operator+(ptrdiff_t num) const noexcept(noexcept((this_t(--(::std::declval< this_t & >())),++(::std::declval< this_t & >()))))
constexpr this_t operator-(ptrdiff_t num) const noexcept(noexcept(((::std::declval< this_t & >())+0)))
constexpr this_t operator++(int) &noexcept(noexcept((this_t(++(::std::declval< this_t & >())))))
constexpr this_t & operator--() &noexcept(is_before_getter_noexcept())
constexpr this_t & operator++() &noexcept(is_next_getter_noexcept())
same_base_t< value_t, base_t_w > base_t
constexpr this_t & operator=(const base_t_rw &a) &noexcept(copy_assign.nothrow< base_t_rw >)
constexpr this_t & operator=(base_t_rw &&a) &noexcept(move_assign.nothrow< base_t_rw >)
remove_cv< base_t_w > base_t_rw
constexpr this_t operator--(int) &noexcept(noexcept((this_t(--(::std::declval< this_t & >())))))
remove_cv< base_t_w > base_t_rw
constexpr reverse_base_t(build_base_t_T &&a) noexcept(construct< base_t_rw >.nothrow< build_base_t_T >)
auto get_handle() noexcept(noexcept(((::std::declval< base_t_w >()).get_handle())))
reverse_base_t< base_t_w > this_t
auto get_next() noexcept(noexcept(((::std::declval< base_t_w >()).get_before())))
auto get_before() noexcept(noexcept(((::std::declval< base_t_w >()).get_next())))
constexpr logical_bool(bool a)
constexpr logical_bool(const logical_bool &)=default
constexpr logical_bool(special_init_t, bool is_true, bool is_false, bool is_unknown=0)
friend logical_bool operator&&(logical_bool a, logical_bool b) noexcept
constexpr logical_bool operator!() const
friend logical_bool operator||(logical_bool a, logical_bool b) noexcept
constexpr logical_bool & operator=(const logical_bool &) &=default
friend logical_bool operator==(logical_bool a, logical_bool b) noexcept
rounding_auto_setter(int new_rounding)
constexpr auto operator()(::std::initializer_list< T >l) const
constexpr auto operator()(Args &&...rest) const
constexpr auto operator()(type_info_t< T >) const
constexpr auto operator()(::std::initializer_list< T >l) const
constexpr auto operator()(Args &&...rest) const
constexpr auto operator()(type_info_t< T >) const
constexpr non_copy_assign_able() noexcept=default
constexpr non_copy_construct_able(non_copy_construct_able &&)=default
constexpr non_copy_construct_able()=default
constexpr non_copy_construct_able(const non_copy_construct_able &)=delete
constexpr non_default_construct_able()=delete
constexpr non_move_assign_able() noexcept=default
constexpr non_move_construct_able(const non_move_construct_able &)=default
constexpr non_move_construct_able()=default
constexpr non_move_construct_able(non_move_construct_able &&)=delete
constexprauto base_get() const noexcept
bitmark提供了一种快速进行四种泛搜索的实现,前提是构建中的pattern中的每一项的usigned表示都在一个字节(表长)内。 若bitmark构建失败,程序应当使用正在进行的泛搜索的朴素实现版本...
bitmark_for_finds() noexcept=default
constexpr bool mark(array_like_view_t< T >pattern) noexcept
constexpr bool operator[](T &index) const noexcept
BMH2改算法表头,用以实施头起始的快速子串匹配算法 大部分情况下应当编译时预构建或对运行时生成的实例进行缓存
constexpr T * match(array_like_view_t< T >range) const noexcept
array_like_view_t< T > _pattern
constexpr void build_table(array_like_view_t< T >pattern) noexcept
constexpr match_pattern(array_like_view_t< T >pattern) noexcept
static constexpr index_type get_index_of(T &ch) noexcept
constexpr range_t(note::from_t< const T >begin, note::to_t< const T >end)
constexpr auto end() noexcept
constexpr auto begin() noexcept
constexpr range_t(note::to_t< const T >end, note::from_t< const T >begin)
constexpr range_t(const T begin, note::size_t< const T >size)
constexpr size_t size() noexcept
constexpr auto begin() const noexcept
constexpr auto end() const noexcept
constexpr range_t(const T begin, note::size_t< size_t >size)
constexpr range_t(const T begin, const T end)
反向BMH2改算法表头,用以实施尾起始的快速子串匹配算法 大部分情况下应当编译时预构建或对运行时生成的实例进行缓存
constexpr T * match(array_like_view_t< T >range) const noexcept
array_like_view_t< T > _pattern
constexpr reverse_match_pattern(array_like_view_t< T >pattern) noexcept
static constexpr index_type get_index_of(T &ch) noexcept
constexpr void build_table(array_like_view_t< T >pattern) noexcept
array_like_view_t的特化类型,表明这是字符串
constexpr string_view_t substr(const char_T *begin) const noexcept
constexpr const char_T * str() const noexcept
constexpr size_t find_last_not_of(const constexpr_str_t< char_T > &str) const
constexpr size_t find_first_not_of(string_view_t str) const
constexpr size_t reverse_find(string_view_t str) const
constexpr size_t find_last_not_of(string_view_t str) const
constexpr size_t find_last_of(const constexpr_str_t< char_T > &str) const
array_like_view_t< const char_T > base_t
constexpr size_t find_first_of(string_view_t str) const
constexpr string_view_t substr(const char_T *begin, size_t len) const noexcept
constexpr size_t reverse_find(const char_T ch) const
constexpr string_view_t(const char_T *str) noexcept
constexpr size_t find_first_not_of(const constexpr_str_t< char_T > &str) const
constexpr size_t find_last_of(const char_T ch) const
constexpr size_t find_last_of(string_view_t str) const
constexpr string_view_t substr(const char_T *begin, const char_T *end) const noexcept
constexpr size_t reverse_find(const constexpr_str_t< char_T > &str) const
constexpr size_t find(string_view_t str) const
constexpr string_view_t substr(size_t pos) const noexcept
constexpr size_t find_first_not_of(const char_T ch) const
constexpr string_view_t substr(size_t pos, size_t len) const noexcept
constexpr string_view_t substr(size_t pos, const char_T *end) const noexcept
constexpr size_t find_first_of(const constexpr_str_t< char_T > &str) const
constexpr size_t find(const constexpr_str_t< char_T > &str) const
constexpr size_t find_first_of(const char_T ch) const
constexpr size_t find_last_not_of(const char_T ch) const
constexpr size_t find(const char_T ch) const
constexpr const char_T * data() const noexcept
type_name_t get_name() const noexcept
static constexpr bool not_has_has_attribute_helper()
constexpr bool operator==(const ::std::type_info &a) const noexcept
constexpr type_info_t() noexcept
constexpr type_info_t(const type_info_t &) noexcept=default
static constexpr bool has_attribute_helper()
type_name_t(const type_name_t &other) noexcept
复制构造函数
string_view_t< char > base_t
~type_name_t() noexcept
析构函数
type_name_t(const char *original_name) noexcept
构造函数
static base_t demangle(const char *original_name) noexcept
重整器包装
type_name_t(type_name_t &&other) noexcept
移动构造函数(swap)
static base_t copy_demangle(base_t demangled_name) noexcept
复制重整结果
virtual func_ptr_t get_func_ptr() const noexcept
comn_ptr_t< this_t > ptr_t
virtual Ret_t call(Args_t...)=0
base_func_data_t< Ret_t(Args_t...)> this_t
bool operator==(const T &a) const
virtual ~base_func_data_t()=default
virtual base_type_info_t get_type_info() const noexcept=0
this_t & operator=(nullptr_t) &noexcept(promise_nothrow_at_destruct)
base_function_t(base_t::ptr_t a) noexcept
function_data_saver_t< Ret_t(Args_t...)> base_t
~base_function_t() noexcept(promise_nothrow_at_destruct)=default
base_function_t(const this_t &a) noexcept
base_function_t(func_ptr_t a) noexcept
Ret_t operator()(Args_t...args) const noexcept(nothrow)
base_function_t() noexcept=default
this_t & operator=(const T &a) &noexcept(promise_nothrow_at_destruct)
base_function_t(T &&a) noexcept(get_data_nothrow< T >)
comn_ptr_t< base_t_w > ptr_t
base_function_t(null_ptr_t) noexcept
base_function_t(this_t &&a) noexcept
void swap_with(this_t &a) noexcept
base_function_t(nullptr_t) noexcept
virtual Ret_t call(Args_t...) noexcept(noexcept((Ret_t()))) override final
virtual base_type_info_t get_type_info() const noexcept override final
virtual ~default_func_data_t() noexcept override final
virtual void throw_self_ptr() const override final
base_func_data_t< Ret_t(Args_t...)> base_t
virtual void throw_self_ptr() override final
virtual const void * get_data_begin() const noexcept override final
virtual bool equal_with(const void *) const noexcept override final
virtual bool equal_with(const void *a) const noexcept(equal.able< T >?equal.nothrow< T >:true) override final
virtual void throw_self_ptr() const override final
virtual func_ptr_t get_func_ptr() const noexcept override final
virtual base_type_info_t get_type_info() const noexcept override final
bool is_unique() const noexcept
virtual ~func_data_t() override=default
base_func_data_t< Ret_t(Args_t...)> base_t
func_data_t< T, Ret_t(Args_t...)> this_t
function_data_warpper_t< T, Ret_t(Args_t...)> data_t
virtual void throw_self_ptr() override final
virtual const void * get_data_begin() const noexcept override final
virtual Ret_t call(Args_t...args) noexcept(invoke< T >.nothrow< Args_t... >) override final
base_t::func_ptr_t func_ptr_t
constexpr seek_value_t(const T &a)
bool operator==(const data_t &a) const noexcept(noexcept((a._value==*_m)))
auto_stack_t(base_t &&a) noexcept(noexcept((base_t(a))))
this_t & operator=(this_t &&a) &noexcept
auto_stack_t(const base_t &a) noexcept(noexcept((base_t(a))))
maybe_fail_reference< T > find(U &&a) noexcept(noexcept(((::std::declval< T & >())==a)))
bool in_stack(const T &a) const noexcept(noexcept(((::std::declval< this_t >()).find(a).not_fail())))
bool not_in_stack(const T &a) const noexcept(noexcept(((::std::declval< this_t >()).in_stack(a))))
virtual logical_bool equal_with(const_ptr a) const noexcept override
virtual void clear() noexcept override
function_t< value(ptr)> _func
base_binary_function_node(function_t< void(ptr)> func) noexcept
virtual base_type_info_t get_type_info() const noexcept override
base_binary_function_node(function_t< value(ptr)> func) noexcept
virtual value be_call(ptr arg_list) override
base_binary_function_node(function_t< void()> func) noexcept
base_binary_function_node this_t
virtual value arec(const value index) override
virtual base_type_info_t get_type_info() const noexcept override
virtual constexpr size_t eq_level() const noexcept override
virtual constexpr size_t equal_level() const noexcept override
virtual constexpr ~base_constexpr_t() noexcept override=default
base_constexpr_t() noexcept
virtual void clear() noexcept override final
virtual void be_replace_as(ptr) noexcept override
virtual base_type_info_t get_type_info() const noexcept override final
virtual base_type_info_t get_additional_type_info() const noexcept=0
binary_node_base_t this_t
virtual void throw_self_ptr() override
virtual value arec(const value index) noexcept(arec_nothrow_helper) override
binary_node_t(const T &a) noexcept
virtual void throw_self_ptr() const override
binary_node_t(T &&a) noexcept
binary_node_t< T > this_t
virtual base_type_info_t get_additional_type_info() const noexcept override
virtual logical_bool equal_with(const_ptr a) const noexcept override
binary_node_base_t base_t
virtual logical_bool eq_with(const_ptr a) const noexcept override
virtual void clear() noexcept(clear_nothrow_helper) override
virtual value be_eval() override
virtual base_type_info_t get_type_info() const noexcept override
virtual logical_bool equal_with(const_ptr a) const noexcept override
map_t< value, const_weak_ptr > _m
virtual void clear() noexcept override
virtual base_type_info_t get_type_info() const noexcept override
virtual value arec(const value index) override
virtual value arec(const value index) override
virtual logical_bool equal_with(const_ptr a) const noexcept override
virtual base_type_info_t get_type_info() const noexcept override
virtual void clear() noexcept override
constexpr base_t() noexcept
virtual value be_eval() override
virtual base_type_info_t get_type_info() const noexcept override
virtual logical_bool equal_with(const_ptr a) const noexcept override
virtual base_type_info_t get_type_info() const noexcept override
const_ptr operator&() const noexcept
value operator()(Args &&...rest)
virtual base_type_info_t get_type_info() const noexcept=0
virtual constexpr size_t eq_level() const noexcept
virtual constexpr size_t equal_level() const noexcept
virtual void waiting_for_destroy() noexcept
virtual void be_replace_as(ptr a) noexcept
node_like() noexcept=default
virtual ~node_like()=default
virtual value arec(const value)=0
logical_bool operator==(const this_t &a) const noexcept
value operator[](auto &&index)
virtual void clear() noexcept=0
logical_bool eq(const_ptr a) const noexcept
logical_bool equal(const_ptr a) const noexcept
virtual void be_replace_as(ptr) noexcept override
virtual logical_bool equal_with(const_ptr a) const noexcept override
virtual base_type_info_t get_type_info() const noexcept override
virtual ~base_data_t() noexcept=default
base_data_t() noexcept=default
virtual base_type_info_t get_type_info() const noexcept override final
constexpr_data_t(const constexpr_data_t &) noexcept=default
virtual ~constexpr_data_t() noexcept override final=default
virtual ptr get_value() noexcept override final
virtual base_data_t * copy() const noexcept override final
constexpr_data_t(ptr a) noexcept
virtual ~null_data_t() noexcept override final=default
virtual base_type_info_t get_type_info() const noexcept override final
virtual ptr get_value() noexcept override final
virtual base_data_t * copy() const noexcept override final
virtual base_type_info_t get_type_info() const noexcept override final
variable_data_t(const variable_data_t &) noexcept=default
virtual ptr get_value() noexcept override final
virtual ~variable_data_t() noexcept override final=default
virtual base_data_t * copy() const noexcept override final
variable_data_t(ptr a) noexcept
value(this_t &&a) noexcept=default
value(const this_t &a) noexcept=default
value(node_like *a) noexcept
auto operator!=(auto &&a) const
this_t & operator>>(this_t a) noexcept
auto operator[](T &&index)
const_ptr operator&() const
constexpr value(special_init_t) noexcept
~value() noexcept=default
void re_ref_to(this_t a) noexcept
auto operator==(auto &&a) const noexcept
value(base_data_t *a) noexcept
void ref_to(this_t a) noexcept
this_t & operator=(auto &&a)
virtual constexpr size_t eq_level() const noexcept override
virtual base_type_info_t get_type_info() const noexcept override
virtual constexpr size_t equal_level() const noexcept override
virtual logical_bool equal_with(const_ptr a) const noexcept override
constexpr library_info_t(special_init_t) noexcept
~library_info_t() noexcept
void * get_symbol(string symbol_name) noexcept
symbol_t & get_symbol_as(string symbol_name) noexcept
library_info_t(string lib_name) noexcept
string get_name() noexcept
string get_error() noexcept
symbol_t(library_handle_t lib, string symbol_name, Ret_t(*self)(Args_t...) noexcept(nothrow)) noexcept
T * operator()() const noexcept
T * operator()() const noexcept
static T * base_call(size_t size) noexcept
constexpr alloc_array_t operator[](size_t a) const noexcept
static T * base_call() noexcept
T * operator()(size_t size) const noexcept
对于特定类型的内存分配结果,获取分配大小并复制一份同样大小的内存
static T * base_call(const T *arg) noexcept(nothrow< T >)
T * operator()(const T *arg) const noexcept(nothrow< T >)
static void base_call(T *p) noexcept
void operator()(T *p) const noexcept
用于自特定类型的内存分配结果获取分配大小 对于null_ptr,返回0 对于单个对象的分配,返回1
static size_t base_call(const T *arg) noexcept(nothrow< T >)
size_t operator()(const T *arg) const noexcept(nothrow< T >)
static constexpr bool nothrow
T * operator()(T *&ptr) const noexcept
constexpr realloc_array_t operator[](size_t a) const noexcept
static void base_call(T *&ptr, size_t nsize) noexcept
void operator()(T *&ptr, size_t nsize) const noexcept
mark_able_for_gc(const mark_able_for_gc &) noexcept
mark_able_for_gc() noexcept
static constexpr bool able
static constexpr bool nothrow
static T * base_call(const T *arg) noexcept(nothrow< T >)
T * operator()(const T *arg) const noexcept(nothrow< T >)
static constexpr bool nothrow
static void base_call(T *&arg, const size_t to_size) noexcept(nothrow< T >)
static constexpr bool nothrow
static constexpr struct elc::defs::memory::get_n::get_forward_resize_t::insert_resize_t insert_with_resize
static constexpr bool able
void operator()(T *&arg, size_t to_size) const noexcept(nothrow< T >)
T * operator()(T *&&arg, size_t to_size) const noexcept(nothrow< T >)
static constexpr bool nothrow
static constexpr bool able
static constexpr struct elc::defs::memory::get_n::get_resize_t::insert_resize_t insert_with_resize
static void base_call(T *&arg, const size_t to_size) noexcept(nothrow< T >)
T * operator()(T *&&arg, size_t to_size) const noexcept(nothrow< T >)
static constexpr bool nothrow
void operator()(T *&arg, size_t to_size) const noexcept(nothrow< T >)
static constexpr struct elc::defs::memory::get_n::get_resize_t::insert_t insert
static size_t base_call(const T *arg) noexcept(nothrow< T >)
size_t operator()(const T *arg) const noexcept(nothrow< T >)
T * operator()(note::to_t< T *& > to, const T &a) const noexcept(nothrow< void >)
T * operator()(note::to_t< T *& > to, array_like_view_t< const T >a) const noexcept(nothrow< void >)
T * operator()(note::to_t< T *& > to, T &&a) const noexcept(nothrow< void >)
T * operator()(Args &&...rest) const noexcept(nothrow< Args... >)
T * operator()(array_like_view_t< const T >a) const noexcept(nothrow< void >)
bool operator()(array_like_view_t< const T >a, note::from_t< T * >from) const noexcept(nothrow< void >)
T * operator()(Args &&...rest) const noexcept(nothrow< Args... >)
constexpr array_get_t operator[](size_t size) const noexcept
void operator()(T *a) const noexcept(nothrow< T >)
static constexpr bool nothrow
void operator()(T *a, decltype(destruct)::not_t) const noexcept(nothrow< T >)
T * operator()(const T &v) const noexcept(nothrow< const T & >)
T * operator()(Args &&...rest) const noexcept(nothrow< Args... >)
T * operator()() const noexcept(nothrow<>)
constexpr void never_in_array_check() const noexcept
void base_call(Args &&...rest) const noexcept(nothrow< Args... >)
T * operator()() const noexcept(nothrow<>)
constexpr array_construct_t operator[](size_t size) const noexcept
void base_call(Args &&...rest) const noexcept(nothrow< Args... >)
T * operator()(Args &&...rest) const noexcept(nothrow< Args... >)
T * operator()(const T &v) const noexcept(nothrow< const T & >)
T * operator()(T *to, const T *from) const noexcept(nothrow< T >)
T * operator()(note::to_t< T * >to, note::from_t< const T * >from) const noexcept(nothrow< T >)
T * operator()(const T &from, note::to_t< T * >to) const noexcept(nothrow< T >)
T * operator()(note::from_t< const T * >from, note::to_t< T * >to) const noexcept(nothrow< T >)
T * operator()(note::to_t< T * >to, const T &from) const noexcept(nothrow< T >)
static constexpr bool trivial
static T * base_call(T *to, const T &from, size_t size) noexcept(nothrow< T >)
static constexpr bool able
static T * base_call(T *to, const T *from, size_t size) noexcept(nothrow< T >)
static T & base_call(T &a, const T &b) noexcept(nothrow< T >)
static constexpr bool nothrow
T & operator()(T &a, const T &b) const noexcept(nothrow< T >)
constexpr array_copy_assign_t operator[](size_t a) const noexcept
T * operator()(T *to, const T *from) const noexcept(nothrow< T >)
T * operator()(T *to, const T &from) const noexcept(nothrow< T >)
T * operator()(note::from_t< const T * >from, note::to_t< T * >to) const noexcept(nothrow< T >)
T * operator()(note::to_t< T * >to, note::from_t< const T * >from) const noexcept(nothrow< T >)
static constexpr bool able
T * operator()(T *to, const T *from) const noexcept(nothrow< T >)
T * operator()(note::from_t< const T * >from, note::to_t< T * >to) const noexcept(nothrow< T >)
static T * base_call(T *to, const T *from) noexcept(nothrow< T >)
T * operator()(T *to, const T &from) const noexcept(nothrow< T >)
static T * base_call(T *to, const T &from, size_t size) noexcept(nothrow< T >)
T * operator()(note::to_t< T * >to, note::from_t< const T * >from) const noexcept(nothrow< T >)
static T * base_call(T *to, const T &from) noexcept(nothrow< T >)
static constexpr bool trivial
T * operator()(T *to, const T *from, size_t size) const noexcept(nothrow< T >)
T * operator()(note::to_t< T * >to, note::from_t< const T * >from, size_t size) const noexcept(nothrow< T >)
static T * base_call(T *to, const T *from, size_t size) noexcept(nothrow< T >)
constexpr array_copy_construct_t operator[](size_t a) const noexcept
static constexpr bool nothrow
T * operator()(note::from_t< const T * >from, note::to_t< T * >to, size_t size) const noexcept(nothrow< T >)
void operator()(T *begin) const noexcept(nothrow< T >)
static void base_call(T *to) noexcept(nothrow< T >)
constexpr array_destruct_t operator[](size_t size) const noexcept
constexpr not_t operator!() const noexcept
static constexpr bool trivial
static constexpr bool nothrow
static void base_call(T *begin, size_t size) noexcept(nothrow< T >)
static constexpr bool able
void operator()(T *begin) const noexcept(nothrow< T >)
T * operator()(T *to, T *from) const noexcept(nothrow< T >)
T * operator()(note::from_t< T * >from, note::to_t< T * >to) const noexcept(nothrow< T >)
T * operator()(note::to_t< T * >to, note::from_t< T * >from) const noexcept(nothrow< T >)
static T & base_call(T &a, T &&b) noexcept(nothrow< T >)
static T * base_call(T *to, T *from, size_t size) noexcept(nothrow< T >)
constexpr array_move_assign_t operator[](size_t a) const noexcept
static constexpr bool nothrow
T & operator()(T &a, T &b) const noexcept(nothrow< T >)
T * operator()(note::to_t< T * >to, note::from_t< T * >from) const noexcept(nothrow< T >)
T * operator()(T *to, T *from) const noexcept(nothrow< T >)
T * operator()(note::from_t< T * >from, note::to_t< T * >to) const noexcept(nothrow< T >)
constexpr array_move_construct_t operator[](size_t a) const noexcept
T * operator()(note::to_t< T * >to, note::from_t< T * >from) const noexcept(nothrow< T >)
static constexpr bool able
static T * base_call(T *to, T *from, size_t size) noexcept(nothrow< T >)
T * operator()(note::from_t< T * >from, note::to_t< T * >to) const noexcept(nothrow< T >)
static T * base_call(T *to, T *from) noexcept(nothrow< T >)
T * operator()(T *to, T *from) const noexcept(nothrow< T >)
static constexpr bool trivial
static constexpr bool nothrow
T * operator()(note::to_t< T * >to, note::from_t< T * >from) const noexcept(nothrow< T >)
T * operator()(note::from_t< T * >from, note::to_t< T * >to) const noexcept(nothrow< T >)
T * operator()(T *to, T *from) const noexcept(nothrow< T >)
T * operator()(note::from_t< T * >from, note::to_t< T * >to) const noexcept(nothrow< T >)
static T * base_call(T *to, T *from, size_t size) noexcept(nothrow< T >)
static T * base_call(T *to, T *from) noexcept(nothrow< T >)
T * operator()(note::to_t< T * >to, note::from_t< T * >from) const noexcept(nothrow< T >)
static constexpr bool trivial
T * operator()(T *to, T *from) const noexcept(nothrow< T >)
static constexpr bool nothrow
static constexpr bool able
constexpr remove_ref< T > && operator()(T &&a) const noexcept
constexpr array_move_t operator[](size_t a) const noexcept
T * operator()(Args &&...rest) const noexcept(nothrow< T, Args... >)
constexpr array_re_construct_t< T > operator[](size_t size) const noexcept
T * operator()(Args &&...rest) const noexcept(nothrow< T, Args... >)
T * operator()(T *to) const noexcept(nothrow< T >)
constexpr placement_re_construct_t< T > operator[](T *p) const noexcept
constexpr void be_replace_as(T *new_p) noexcept
constexpr void be_replace_as(nullptr_t) noexcept
constexpr bool replaced() const noexcept
constexpr ~replace_able() noexcept
constexpr T * get_ptr() const noexcept
constexpr replace_able() noexcept
T & operator*() const noexcept(get_nothrow)
base_ptr_t & operator=(const same_ptr &a) &noexcept(reset_nothrow &&get_nothrow)
base_ptr_t & operator=(const base_ptr_t &a) &noexcept(reset_nothrow &&get_nothrow)
base_ptr_t & operator=(null_ptr_t) &noexcept(reset_nothrow)
T * operator->() const noexcept(get_nothrow)
ptr_t< T, ref_type, do_replace_check > base_t
base_ptr_t(base_ptr_t &a) noexcept
base_ptr_t & operator=(nullptr_t) &noexcept(reset_nothrow)
auto operator!() const noexcept(get_nothrow)
base_ptr_t< T, ref_type, do_replace_check > this_t
base_ptr_t & operator=(same_ref &&a) &noexcept
base_ptr_t(base_ptr_t &&a) noexcept
base_ptr_t & operator=(base_ptr_t &&a) &noexcept
base_ptr_t & operator=(T *a) &noexcept(reset_nothrow)
void do_replace(T *p) noexcept(replace_check_nothrow &&reset_nothrow)
auto operator==(nullptr_t) const noexcept(noexcept((operator==(null_ptr))))
auto operator==(const ptr_t< T, ref_type_, do_replace_check_ > &b) const noexcept(noexcept((pointer_equal((::std::declval< const this_t & >()).get(), b.get()))))
bool unique() const noexcept
constexpr ptr_t(nullptr_t=nullptr) noexcept
constexpr conditional< do_replace_check &&type_info< T >. template has_attribute_helper< replace_able >(), unstable_hash_t, hash_t > hash() const noexcept(noexcept((elc::defs::hash(get()))))
ptr_t(const same_ref &a) noexcept
constexpr ptr_t(null_ptr_t) noexcept
same_ref_p_t< T, ref_type > same_ref
ptr_t(const same_ptr &a) noexcept
void reset(T *a) const noexcept(reset_nothrow)
void replace_check() const noexcept(replace_check_nothrow)
ptr_t(ptr_t &&a) noexcept
ptr_t(T *a, special_init_t) noexcept
same_ptr_p_t< T > same_ptr
auto operator==(null_ptr_t) const noexcept(noexcept((operator==((T *) null_ptr))))
ptr_t(const ptr_t &a) noexcept
~ptr_t() noexcept(cut_nothrow)
void do_replace(const ptr_t< T, ref_type_, do_replace_check_ > &p) noexcept(replace_check_nothrow &&reset_nothrow)
void reset(nullptr_t=nullptr) const noexcept(reset_nothrow)
auto operator==(const T *a) const noexcept(noexcept((pointer_equal(add_const((::std::declval< const this_t & >()).get()), a))))
ptr_t< T, ref_type, do_replace_check > this_t
constexpr ptr_t(T *a) noexcept
same_ref_p_t< T, ref_type > base_t
T * get() const noexcept(get_nothrow)
ptr_t(const ptr_t< remove_cv< T >, ref_type, do_replace_check > &a) noexcept
virtual T & get() noexcept override
virtual void map_and_mark() noexcept override
same_ptr_p_t(const same_ptr_p_t &) noexcept=default
same_ptr_p_t(T *a) noexcept
void add_ref() const noexcept
static void cut_ref(T *a) noexcept(cut_nothrow)
void swap_with(same_ref_p_t &a) noexcept
same_ref_p_t(const same_ptr_p_t< T > &a) noexcept
void cut_ref() const noexcept(noexcept((cut_ref(nullptr))))
same_ref_p_t(T *a) noexcept
static void add_ref(T *a) noexcept
void inter_namespace(const value namespace_name)
bool has_symbol(auto &&index)
void inter_namespace(auto &&index)
value get_symbol_type_map(ptr thenamespace)
ptr get_symbol_namespace(auto &&index)
ptr get_symbol_namespace(const value index)
value get_symbol(const value index)
value get_symbol(auto &&index)
bool has_symbol(const value index)
value get_symbol_type(auto &&index)
value get_symbol_type(const value index)
library_handle_t package_symbol_loader_handle
ptr get_load_error() noexcept
~package_symbol_loader_t() noexcept=default
function_t< ptr(string lib_name, size_t lib_ver, string symbol_name) noexcept > load_interface
size_t read(T *v, size_t size=1)
virtual ~base_istream()=default
virtual size_t read(byte *buf, size_t size)=0
void write(const T *v, size_t size=1)
virtual void write(const byte *buf, size_t size)=0
virtual ~base_ostream()=default
virtual ~base_stream()=default
virtual void seek_to(void *)=0
virtual void * seek(seek_type, int_t)=0
virtual void flush() noexcept override
virtual void sync() noexcept override
virtual void seek_to(void *p) noexcept override
virtual void close() noexcept override
size_t bufsize() const noexcept
virtual void write(const byte *buf, size_t size) noexcept override
~memory_stream() noexcept
virtual void * seek(seek_type st, int_t offsize) noexcept override
virtual size_t read(byte *buf, size_t size) noexcept override
virtual size_t read(byte *buf, size_t size) noexcept override=0
size_t read(T *v, size_t size=1) noexcept
void write(const T *v, size_t size=1) noexcept
virtual void write(const byte *buf, size_t size) noexcept override=0
virtual ~noexcept_stream() noexcept override=default
virtual void sync() noexcept override=0
virtual void seek_to(void *) noexcept override=0
virtual compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >)=0
base_string_data_t() noexcept=default
static void be_replace(this_t *a, ptr_t b) noexcept(ptr_reset_nothrow)
compare_t::type< char_T > compare_type
compare_type compare_with(ptr_t with) noexcept(compare.nothrow< char_T >)
static void be_replace(ptr_t &a, ptr_t b) noexcept(ptr_reset_nothrow)
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >)=0
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow)=0
virtual bool same_struct(ptr_t) noexcept=0
virtual ptr_t do_pop_front(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow)
bool positive_gc_profit() noexcept
base_string_data_t< char_T > this_t
bool is_unique() noexcept
virtual float_size_t get_base_memory_cost() noexcept=0
hash_t get_hash(ptr_t &p) noexcept(hash_nothrow)
comn_ptr_t< this_t > ptr_t
bool equal_with(ptr_t with) noexcept(equal.nothrow< char_T >)
compare_type compare_with(ptr_t with, size_t pos, size_t size) noexcept(compare.nothrow< char_T >)
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow)=0
virtual ~base_string_data_t() noexcept(destruct_nothrow)=default
void self_changed() noexcept
bool has_hash_cache() noexcept
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept=0
compare_type default_compare_method(ptr_t with) noexcept(compare.nothrow< char_T >)
bool equal_with(const char_T *with) noexcept(equal.nothrow< char_T >)
bool equal_with(ptr_t with, size_t pos, size_t size) noexcept(equal.nothrow< char_T >)
string_view_t< char_T > string_view_t
hash_t get_others_hash_with_calculated_before(hash_t before, size_t before_size, ptr_t &p, size_t pos, size_t size) noexcept(hash_nothrow)
hash_t get_hash_cache() noexcept
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &p, size_t pos, size_t size) noexcept(hash_nothrow)
virtual char_T * get_c_str(ptr_t &) noexcept(get_data_nothrow)
virtual hash_t get_hash_detail(ptr_t &p) noexcept(hash_nothrow)
virtual size_t get_size() noexcept=0
void reset_hash_cache() noexcept
static void equivalent_optimization(auto &&a, auto &&b) noexcept(ptr_reset_nothrow)
virtual const char_T * get_data(ptr_t &p) noexcept(get_data_nothrow)
compare_type compare_with(string_view_t with) noexcept(compare.nothrow< char_T >)
hash_t set_hash_cache(hash_t value) noexcept
virtual const range_n::reverse_match_pattern< const char_T > & get_reverse_match_pattern_from_self(ptr_t &self) noexcept(copy_assign_nothrow &&move_construct_nothrow)
virtual const range_n::match_pattern< const char_T > & get_match_pattern_from_self(ptr_t &self) noexcept(copy_assign_nothrow &&move_construct_nothrow)
bool default_equal_method(ptr_t with) noexcept(equal.nothrow< char_T >)
bool same_type(ptr_t a) noexcept
bool equal_with(string_view_t with) noexcept(equal.nothrow< char_T >)
compare_type compare_with(const char_T *with) noexcept(compare.nothrow< char_T >)
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
comn_string_data_t(ptr_t str, size_t pos, size_t size) noexcept(construct_nothrow &©_assign_nothrow)
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
comn_string_data_t< char_T > this_t
virtual bool same_struct(ptr_t) noexcept override final
comn_ptr_t< this_t > ptr_t
void self_changed() noexcept
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
comn_string_data_t(size_t size) noexcept(construct_nothrow &©_assign_nothrow)
virtual const range_n::reverse_match_pattern< const char_T > & get_reverse_match_pattern_from_self(ptr_t &self) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
string_view_t< char_T > string_view_t
comn_string_data_t(string_view_t str) noexcept(construct_nothrow &©_assign_nothrow)
void clear_match_pattern() noexcept
base_string_data_t< char_T > base_t
virtual const range_n::match_pattern< const char_T > & get_match_pattern_from_self(ptr_t &self) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
virtual size_t get_size() noexcept override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual char_T * get_c_str(ptr_t &) noexcept override final
comn_string_data_t(size_t size, char_T ch) noexcept(construct_nothrow &©_assign_nothrow)
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
virtual ~comn_string_data_t() noexcept(destruct_nothrow) override final
virtual char_T * get_unique_c_str(ptr_t &p) noexcept(get_data_nothrow) override final
comn_string_data_t(ptr_t str) noexcept(construct_nothrow &©_assign_nothrow)
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
virtual const range_n::match_pattern< const char_T > & get_match_pattern_from_self(ptr_t &self) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
comn_ptr_t< this_t > ptr_t
virtual const char_T * get_const_c_str(ptr_t &p) noexcept(get_data_nothrow) override final
virtual bool same_struct(ptr_t with) noexcept override final
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual const char_T * get_data(ptr_t &) noexcept(get_data_nothrow) override final
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
virtual size_t get_size() noexcept override final
constexpr_string_data_t(const constexpr_str_t< char_T > &str) noexcept
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
virtual const range_n::reverse_match_pattern< const char_T > & get_reverse_match_pattern_from_self(ptr_t &self) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
string_view_t< char_T > string_view_t
constexpr_string_data_t(string_view_t str) noexcept
constexpr_string_data_t< char_T > this_t
base_string_data_t< char_T > base_t
virtual ~constexpr_string_data_t() noexcept(destruct_nothrow) override final
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept override final
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
void clear_match_pattern() noexcept
virtual ptr_t apply_str_to_begin(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
virtual ptr_t apply_str_to_end(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual ptr_t apply_str_to_end(ptr_t str) noexcept(apply_data_nothrow) override final
end_apply_string_data_t< char_T > this_t
comn_ptr_t< this_t > ptr_t
end_apply_string_data_t(ptr_t str, size_t count) noexcept
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
virtual hash_t get_hash_detail(ptr_t &) noexcept(hash_nothrow) override final
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
base_string_data_t< char_T > base_t
string_view_t< char_T > string_view_t
virtual char_T * get_c_str(ptr_t &p) noexcept(get_data_nothrow) override final
virtual ptr_t do_insert(size_t pos, string_view_t str) noexcept(copy_construct_nothrow) override final
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
end_apply_string_data_t(ptr_t str, size_t count, char_T ch) noexcept
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &, size_t pos, size_t size) noexcept(hash_nothrow) override final
virtual bool same_struct(ptr_t with) noexcept override final
virtual ptr_t do_pop_front(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual ptr_t do_pop_back(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual ptr_t apply_str_to_begin(ptr_t str) noexcept(apply_data_nothrow) override final
void shrink() noexcept(_m.resize_nothrow)
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
end_apply_string_data_t(ptr_t str, string_view_t end) noexcept(construct_nothrow &©_assign_nothrow)
virtual size_t get_size() noexcept override final
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
virtual ptr_t apply_str_to_end(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
comn_ptr_t< this_t > ptr_t
erased_string_data_t< char_T > this_t
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &, size_t pos, size_t size) noexcept(hash_nothrow) override final
virtual size_t get_size() noexcept override final
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
virtual bool same_struct(ptr_t with) noexcept override final
virtual ptr_t apply_str_to_end(ptr_t str) noexcept(apply_data_nothrow) override final
virtual ptr_t do_erase(size_t pos, size_t size) noexcept override final
string_view_t< char_T > string_view_t
virtual ptr_t apply_str_to_begin(ptr_t str) noexcept(apply_data_nothrow) override final
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
void null_equivalent_check() noexcept
virtual ptr_t do_pop_front(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
virtual ptr_t do_pop_back(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual hash_t get_hash_detail(ptr_t &) noexcept(hash_nothrow) override final
erased_string_data_t(ptr_t str, size_t erase_pos, size_t erase_size) noexcept
virtual ptr_t apply_str_to_begin(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
base_string_data_t< char_T > base_t
virtual ptr_t apply_str_to_begin(ptr_t str) noexcept(apply_data_nothrow) override final
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
virtual size_t get_size() noexcept override final
virtual ptr_t apply_str_to_end(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
head_apply_string_data_t(ptr_t str, string_view_t head) noexcept(construct_nothrow &©_assign_nothrow)
virtual bool same_struct(ptr_t with) noexcept override final
comn_ptr_t< this_t > ptr_t
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
void shrink() noexcept(_m.forward_resize_nothrow)
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
virtual ptr_t do_insert(size_t pos, string_view_t str) noexcept(copy_construct_nothrow) override final
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &, size_t pos, size_t size) noexcept(hash_nothrow) override final
string_view_t< char_T > string_view_t
virtual hash_t get_hash_detail(ptr_t &) noexcept(hash_nothrow) override final
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
base_string_data_t< char_T > base_t
virtual ptr_t apply_str_to_end(ptr_t str) noexcept(apply_data_nothrow) override final
head_apply_string_data_t< char_T > this_t
virtual ptr_t do_pop_front(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual char_T * get_c_str(ptr_t &p) noexcept(get_data_nothrow) override final
virtual ptr_t do_pop_back(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual ptr_t apply_str_to_begin(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
virtual ptr_t do_insert(size_t pos, string_view_t str) noexcept(copy_construct_nothrow) override final
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
comn_ptr_t< this_t > ptr_t
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
virtual ptr_t do_pop_front(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual ptr_t apply_str_to_begin(ptr_t str) noexcept(apply_data_nothrow) override final
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &, size_t pos, size_t size) noexcept(hash_nothrow) override final
virtual bool same_struct(ptr_t with) noexcept override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
string_view_t< char_T > string_view_t
base_string_data_t< char_T > base_t
virtual hash_t get_hash_detail(ptr_t &) noexcept(hash_nothrow) override final
virtual size_t get_size() noexcept override final
inserted_string_data_t(ptr_t to, ptr_t insert_data, size_t insert_pos) noexcept
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
virtual ptr_t apply_str_to_end(ptr_t str) noexcept(apply_data_nothrow) override final
virtual ptr_t apply_str_to_begin(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t index) noexcept override final
virtual ptr_t do_erase(size_t pos, size_t size) noexcept override final
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual ptr_t apply_str_to_end(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual ptr_t do_pop_back(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
inserted_string_data_t< char_T > this_t
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
virtual hash_t get_hash_detail(ptr_t &p) noexcept override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept override final
virtual size_t get_size() noexcept override final
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &p, size_t pos, size_t size) noexcept override final
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
virtual char_T * get_c_str(ptr_t &) noexcept override final
null_string_data_t() noexcept
virtual ptr_t apply_str_to_begin(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
null_string_data_t< char_T > this_t
comn_ptr_t< this_t > ptr_t
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept override final
virtual ptr_t apply_str_to_begin(ptr_t str) noexcept(apply_data_nothrow) override final
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept override final
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
virtual ptr_t do_erase(size_t pos, size_t size) noexcept override final
base_string_data_t< char_T > base_t
virtual ptr_t apply_str_to_end(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual ptr_t apply_str_to_end(ptr_t str) noexcept override final
virtual ptr_t do_pop_front(size_t size, ptr_t &self) noexcept override final
virtual ptr_t do_insert(size_t pos, string_view_t str) noexcept(construct_nothrow &©_assign_nothrow) override final
string_view_t< char_T > string_view_t
virtual ptr_t do_pop_back(size_t size, ptr_t &self) noexcept override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual ptr_t do_insert(size_t pos, ptr_t str) noexcept override final
virtual char_T arec(size_t index) noexcept override final
virtual bool same_struct_equal(ptr_t with) noexcept override final
virtual bool same_struct(ptr_t) noexcept override final
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &, size_t pos, size_t size) noexcept(hash_nothrow) override final
virtual size_t get_size() noexcept override final
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
comn_ptr_t< this_t > ptr_t
base_string_data_t< char_T > base_t
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
same_value_compress_string_data_t(size_t size, char_T value) noexcept
virtual ptr_t do_pop_front(size_t size, ptr_t &) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
virtual hash_t get_hash_detail(ptr_t &) noexcept(hash_nothrow) override final
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
virtual bool same_struct(ptr_t with) noexcept override final
same_value_compress_string_data_t< char_T > this_t
virtual ptr_t do_pop_back(size_t size, ptr_t &) noexcept(construct_nothrow &©_assign_nothrow) override final
substr_string_data_t(ptr_t str, size_t sub_begin, size_t sub_size) noexcept
virtual const char_T * get_const_c_str(ptr_t &p) noexcept(get_data_nothrow) override final
virtual ptr_t apply_str_to_begin(ptr_t str) noexcept(apply_data_nothrow) override final
virtual const char_T * get_data(ptr_t &) noexcept(get_data_nothrow) override final
void null_equivalent_check() noexcept
virtual ptr_t do_pop_back(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
comn_ptr_t< this_t > ptr_t
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
substr_string_data_t< char_T > this_t
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
virtual hash_t get_hash_detail(ptr_t &) noexcept(hash_nothrow) override final
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
string_view_t< char_T > string_view_t
virtual size_t get_size() noexcept override final
virtual bool same_struct(ptr_t with) noexcept override final
base_string_data_t< char_T > base_t
virtual ptr_t apply_str_to_begin(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
virtual ptr_t apply_str_to_end(ptr_t str) noexcept(apply_data_nothrow) override final
virtual ptr_t apply_str_to_end(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
virtual ptr_t do_pop_front(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &, size_t pos, size_t size) noexcept(hash_nothrow) override final
virtual ptr_t apply_str_to_end(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
virtual ptr_t do_pop_back(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
sum_string_data_t(ptr_t before, ptr_t after) noexcept
sum_string_data_t< char_T > this_t
virtual ptr_t apply_str_to_end(ptr_t str) noexcept(apply_data_nothrow) override final
comn_ptr_t< this_t > ptr_t
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &, size_t pos, size_t size) noexcept(hash_nothrow) override final
virtual bool same_struct(ptr_t with) noexcept override final
virtual ptr_t do_pop_front(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual ptr_t apply_str_to_begin(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
virtual hash_t get_hash_detail(ptr_t &) noexcept(hash_nothrow) override final
string_view_t< char_T > string_view_t
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
virtual ptr_t apply_str_to_begin(ptr_t str) noexcept(apply_data_nothrow) override final
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual size_t get_size() noexcept override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
base_string_data_t< char_T > base_t
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
void push_front(string_view_t str) &noexcept
string_t & operator=(string_t &&str) noexcept
size_t find(const string_t &str, size_t begin=0) const noexcept(find_nothrow)
constexpr bool ends_with(const char_T *str) const noexcept
void arec_set(size_t index, char_T a) noexcept
float_size_t memory_cost() const noexcept
string_t arec(size_t index, constexpr_str_t &delimiter_str) const
size_t find_first_of(const string_t &str) const noexcept(find_nothrow)
string_t(string_view_t str) noexcept
size_t size() const noexcept
string_t & operator=(const string_t &str) noexcept
size_t reverse_find(const char_T ch) const noexcept(find_nothrow)
constexpr bool starts_with(constexpr_str_t &str) const noexcept
string_t operator+(const string_t &str) const noexcept
string_t & operator+=(string_view_t str) &noexcept
size_t find_last_of(const string_t &str) const noexcept(find_nothrow)
size_t find_last_of(const arec_t &&ch) const noexcept(find_nothrow)
constexpr auto operator<=>(string_view_t a) const noexcept(compare.nothrow< char_T >)
reverse_iterator_t< char_T, iterator_base_t > reverse_iterator
char_T pop_front() noexcept
constexpr auto operator<=>(const char_T *a) const noexcept(compare.nothrow< char_T >)
const char_T * data() const noexcept
constexpr bool ends_with(constexpr_str_t &str) const noexcept
char_T * writeable_data() noexcept
const_iterator cbegin() const noexcept
size_t find_first_not_of(char_T ch) const noexcept(find_nothrow)
constexpr auto operator==(const char_T *a) const noexcept(equal.nothrow< char_T >)
void push_front(const arec_t &&ch) &noexcept
size_t find_last_not_of(const arec_t &&ch) const noexcept(find_nothrow)
void resize(size_t nsize) noexcept
const arec_t front() const noexcept
size_t find_last_of(constexpr_str_t &str) const noexcept(find_nothrow)
this_t & append(size_t size, char_T ch) noexcept
constexpr string_t() noexcept
size_t find_first_of(const arec_t &&ch) const noexcept(find_nothrow)
size_t length() const noexcept
size_t find_first_of(constexpr_str_t &str) const noexcept(find_nothrow)
constexpr auto operator==(constexpr_str_t &a) const noexcept(equal.nothrow< char_T >)
constexpr bool starts_with(const char_T *str) const noexcept
size_t find(string_view_t str, size_t begin=0) const noexcept(find_nothrow)
iterator get_iterator_at(ptrdiff_t index) noexcept
friend string_t operator+(char_T ch, const string_t &str) noexcept
reverse_const_iterator rcbegin() const noexcept
friend string_t operator+(const char_T *str1, const string_t &str2) noexcept
size_t reverse_find(const string_t &str) const noexcept(find_nothrow)
base_t_w::string_view_t string_view_t
size_t find(constexpr_str_t &str, size_t begin=0) const noexcept(find_nothrow)
const_iterator_t< char_T, const iterator_base_t > const_iterator
size_t find_last_not_of(const string_t &str) const noexcept(find_nothrow)
const floating_arec_t operator[](float_t index) const noexcept
size_t reverse_find(constexpr_str_t &str) const noexcept(find_nothrow)
bool empty() const noexcept
requires ::std::is_arithmetic_v< T > auto operator[](T index) noexcept
const arec_t operator[](size_t index) const noexcept
size_t find_first_of(char_T ch) const noexcept(find_nothrow)
string_t & operator+=(const string_t &str) &noexcept
reverse_const_iterator rbegin() const noexcept
void push_back(char_T ch) &noexcept
constexpr bool contains(char_T ch) const noexcept
string_t(const char_T *str) noexcept
constexpr bool starts_with(char_T ch) const noexcept
string_t(size_t size) noexcept
constexpr auto operator<=>(const string_t &a) const noexcept(compare.nothrow< char_T >)
constexpr bool ends_with(const string_t &str) const noexcept
void insert(size_t pos, const string_t &str) &noexcept
string_t(char_T ch, size_t size) noexcept
void push_front(const string_t &str) &noexcept
size_t find_first_of(const char_T *str) const noexcept(find_nothrow)
void push_back(const char_T *str) &noexcept
auto view() const &noexcept
size_t reverse_find(string_view_t str) const noexcept(find_nothrow)
string_t< char_T > this_t
const_iterator end() const noexcept
reverse_const_iterator get_reverse_iterator_at(ptrdiff_t index) const noexcept
size_t find_first_not_of(const string_t &str) const noexcept(find_nothrow)
size_t find_first_not_of(string_view_t str) const noexcept(find_nothrow)
constexpr bool starts_with(const string_t &str) const noexcept
string_t(string_t &&str) noexcept
string_t && operator+(U &&b) &&noexcept(noexcept((*this+=b)))
constexpr bool contains(const char_T *str) const noexcept
void push_back(const string_t &str) &noexcept
iterator_t< char_T, iterator_base_t > iterator
constexpr auto operator<=>(constexpr_str_t &a) const noexcept(compare.nothrow< char_T >)
size_t find_first_not_of(constexpr_str_t &str) const noexcept(find_nothrow)
reverse_const_iterator rend() const noexcept
void insert(size_t pos, const char_T *str) &noexcept
arec_t operator[](size_t index) noexcept
constexpr bool contains(string_view_t str) const noexcept
string_t pop_front(size_t size) noexcept
const arec_t back() const noexcept
void insert(size_t pos, string_view_t str) &noexcept
iterator begin() noexcept
char_T * writeable_c_str() noexcept
size_t find_last_of(string_view_t str) const noexcept(find_nothrow)
string_t(size_t size, char_T ch) noexcept
floating_arec_t operator[](float_t index) noexcept
size_t find_first_not_of(const arec_t &&ch) const noexcept(find_nothrow)
base_string_data_t< char_T > base_t_w
string_t arec(size_t index, char_T delimiter) const
void erase(size_t pos, size_t size=1) &noexcept
reverse_iterator rbegin() noexcept
void resize(size_t nsize, char_T ch) noexcept
string_t operator+(const arec_t &&ch) const noexcept
constexpr bool contains(constexpr_str_t &str) const noexcept
string_t arec(size_t index, const string_t &delimiter_str) const
void push_front(const char_T *str) &noexcept
size_t find_first_of(string_view_t str) const noexcept(find_nothrow)
size_t find_last_not_of(char_T ch) const noexcept(find_nothrow)
string_t & operator+=(const arec_t &&ch) &noexcept
char_T arec(size_t index) noexcept
string_t substr(size_t begin, size_t size=npos) const noexcept
const constexpr_str_t< char_T > constexpr_str_t
void swap_with(this_t &a) noexcept
string_t pop_back(size_t size) noexcept
void insert(size_t pos, char_T ch) &noexcept
reverse_const_iterator rcend() const noexcept
string_t arec(size_t index, string_view_t delimiter_str) const
requires ::std::is_arithmetic_v< T > const auto operator[](T index) const noexcept
size_t find_last_not_of(string_view_t str) const noexcept(find_nothrow)
string_t & operator+=(char_T ch) &noexcept
size_t find_last_of(const char_T *str) const noexcept(find_nothrow)
size_t find_last_not_of(constexpr_str_t &str) const noexcept(find_nothrow)
constexpr auto operator==(string_view_t a) const noexcept(equal.nothrow< char_T >)
constexpr bool contains(const string_t &str) const noexcept
char_T pop_back() noexcept
void push_back(const arec_t &&ch) &noexcept
const_iterator get_iterator_at(ptrdiff_t index) const noexcept
void push_back(string_view_t str) &noexcept
string_t & operator+=(const char_T *str) &noexcept
constexpr bool ends_with(char_T ch) const noexcept
constexpr bool ends_with(string_view_t str) const noexcept
size_t find_first_not_of(const char_T *str) const noexcept(find_nothrow)
constexpr bool starts_with(string_view_t str) const noexcept
const_iterator begin() const noexcept
string_t operator+(const char_T *str) const noexcept
string_t operator+(string_view_t str) const noexcept
void push_front(char_T ch) &noexcept
string_t(const string_t &str) noexcept
size_t find_last_of(char_T ch) const noexcept(find_nothrow)
const char_T * c_str() const noexcept
size_t find(const char_T ch, size_t begin=0) const noexcept(find_nothrow)
auto to_string_view_t() const &noexcept
const_iterator cend() const noexcept
reverse_iterator rend() noexcept
friend string_t operator+(string_view_t str1, const string_t &str2) noexcept
constexpr string_t(char_T ch) noexcept
reverse_iterator get_reverse_iterator_at(ptrdiff_t index) noexcept
constexpr string_t & operator=(char_T ch) noexcept
constexpr auto operator==(const string_t &a) const noexcept(equal.nothrow< char_T >)
constexpr string_t(constexpr_str_t &str) noexcept
size_t find_last_not_of(const char_T *str) const noexcept(find_nothrow)
reverse_const_iterator_t< char_T, const iterator_base_t > reverse_const_iterator
constexpr string_t & operator=(constexpr_str_t &str) noexcept